查看原文
其他

可视化 | 微博用户群体情绪随时间变化趋势

大邓 大邓和他的Python
2024-09-09

DataFrame数据如何绘制按时间趋势的折线图,今天以weibo数据集为例,绘制微博文本内容折线图

  1. 微博文本内容「平均长度随时间变化」
  2. 微博文本内容「平均情感分值随时间变化」

一、准备工作

1.1 下载数据集

数据集下载链接 https://www.kaggle.com/datasets/dylanli/weibo-content-during-covid19-period


含8个json文件

  • user1.json、user2.json、user3.json、user4.json
  • weibo1.json、weibo2.json、weibo3.json、weibo4.json

这里仅尝试读取weibo1.json  

import os

os.listdir()
['weibo2.json',
'.DS_Store',
'weibo3.json',
'Untitled.ipynb',
'weibo4.json',
'user1.json',
'user2.json',
'说明.md',
'user3.json',
'.ipynb_checkpoints',
'user4.json',
'weibo1.json']



1.2 导入数据

导入 7138微博用户数据后,查看

  1. 数据量
  2. 字段的数据类型
import pandas as pd

weibo_df = pd.read_json('weibo1.json')
weibo_df.head()


#记录数
len(weibo_df)
560840

#字段的数据类型
weibo_df.dtypes
_id object
user_id object
screen_name object
id object
bid object
text object
pics object
video_url object
location object
created_at datetime64[ns]
source object
attitudes_count int64
comments_count int64
reposts_count int64
topics object
at_users object
retweet object
dtype: object



二、数据分析

绘制微博内容

  1. 平均长度随时间变化
  2. 平均情感分值随时间变化

2.1 平均长度随时间变化

import matplotlib.pyplot as plt
import matplotlib
import matplotlib_inline
matplotlib_inline.backend_inline.set_matplotlib_formats('png''svg')
import scienceplots
import platform

plt.style.use(['science''no-latex''cjk-sc-font'])
system = platform.system()  # 获取操作系统类型

if system == 'Windows':
    font = {'family''SimHei'}
elif system == 'Darwin':
    font = {'family''Arial Unicode MS'}
else:
    font = {'family''sans-serif'}
matplotlib.rc('font', **font)  # 设置全局字体



# 统计人均字符长度变化
#df['text_length'] = weibo_df['text'].apply(lambda x: len(x))
weibo_df['text_length'] = weibo_df['text'].str.len()
df_avg_length = weibo_df.groupby('created_at')['text_length'].mean().reset_index()

# 绘制人均字符长度变化图
plt.figure(figsize=(105))
plt.plot(df_avg_length['created_at'], df_avg_length['text_length'])
plt.xlabel('日期')
plt.ylabel('微博内容平均长度')
plt.title('微博内容平均长度随时间变化')
plt.xticks(rotation=45)
plt.show()


2.2 平均情感分值随时间变化

  1. 设计情感计算函数senti_score
  2. 测试一条文本的情感计算实验
  3. 推广到所有weibo内容的情感计算
  4. 参考「平均长度随时间变化」,会「平均情感分值随时间变化」
import cntext as ct
import jieba

#1.8.4版本cntext
#使用知网Hownet情感词典
pos_words = ct.load_pkl_dict('HOWNET.pkl')['HOWNET']['pos']
neg_words = ct.load_pkl_dict('HOWNET.pkl')['HOWNET']['neg']


def senti_score(text):
    pos,neg = 0,0
    words = jieba.lcut(text)
    for word in words:
        if word in pos_words:
            pos = pos + 1
        if word in neg_words:
            neg = neg + 1
    #(pos-neg)/(pos+neg)即可,为防止分母为0,特加1
    return (pos-neg)/(pos+neg+1)
    
    
print(senti_score(text='我很开心!'))
print(senti_score(text='我很难过!'))
0.5
-0.5

len(weibo1_df)
560840

import matplotlib.pyplot as plt
import matplotlib
import matplotlib_inline
matplotlib_inline.backend_inline.set_matplotlib_formats('png''svg')
import scienceplots
import platform
import numpy as np

#一共有560840条推特,这个部分代码运算量比较大,你所看到的情感变化图是按照1%随机抽样绘制的结果。
#按照1%随机抽样绘制的结果, 
#np.random.seed(666)
#weibo_df = weibo_df.sample(frac=0.01)

plt.style.use(['science''no-latex''cjk-sc-font'])
system = platform.system()  # 获取操作系统类型

if system == 'Windows':
    font = {'family''SimHei'}
elif system == 'Darwin':
    font = {'family''Arial Unicode MS'}
else:
    font = {'family''sans-serif'}
matplotlib.rc('font', **font)  # 设置全局字体


# 统计平均情感分值
weibo_df['senti'] = weibo_df['text'].apply(senti_score)
df_senti_avg_length = weibo_df.groupby('created_at')['senti'].mean().reset_index()

# 绘制平均情感分值随时间变化
plt.figure(figsize=(105))
plt.plot(df_senti_avg_length['created_at'], df_senti_avg_length['senti'])
plt.xlabel('日期')
plt.ylabel('微博内容平均情感分值')
plt.title('微博内容平均情感分值随时间变化')
plt.xticks(rotation=45)
plt.show()


精选内容

管理世界 | 使用文本分析词构建并测量 短视主义

管理世界 | 使用 经营讨论与分析 测量 企业数字化指标

管理世界 | 用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标

管理世界 | 政府与市场心理因素的经济影响及其测度

文本分析 | 中国企业高管团队创新注意力(含代码)

金融研究 | 使用Python构建「关键审计事项信息含量」

PNAS | 14000+篇心理学顶刊论文可复现性调研(含代码)

网络爬虫 | 使用Python采集B站弹幕和评论数据

网络爬虫 | 使用Python披露采集 Up 主视频详情信息

B站 | "高铁互殴"视频词云图绘制

可视化 | 绘制《三体》人物关系网络图

可视化 | 99-21年地方政府报告关键词变化趋势

使用 Word2Vec 和 TF-IDF 计算五类企业文化

采购合同数据集 | 政府采购何以牵动企业创新

96G数据集 | 2亿条中国大陆企业工商注册信息

70G数据集 | 3571万条专利申请数据集(1985-2022年)

93G数据集 | 中国裁判文书网(2010~2021)

数据集 | 3.9G全国POI地点兴趣点数据集

数据集 | 「问询函」

实验数据 | 194城市楼市政策梳理(2010-2022)

数据集 | 07-21年上市公司「委托贷款公告」

单个csv文件体积大于电脑内存,怎么办?

继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存