[Python舆情分析] 一.舆情事件的幂律特性分析及时间间隔分布图绘制

本文主要是做者学习舆情分析、情感分析、人类行为动力学分析的在线笔记,主要包括两方面内容,一是结合参考文献介绍人类行为动力学分析,二是讲解Python绘制幂律特性及时间间隔分布图的方法。基础性文章,但愿对您有所帮助。python

PS:最近参加CSDN2018年博客评选,但愿您能投出宝贵的一票。我是59号,Eastmount,杨秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/indexweb


一.舆情分析基础知识

该部分主要借鉴引用以下论文,强烈推荐读者学习,尤为是研究舆情分析、图书情报、人类行为动力学的同窗。sql

  • 闫小勇. 人类个体出行行为的统计特征. 电子科技大学学报, 2011.
  • 刘海鸥, 等. 在线社交活动中的用户画像及其信息传播行为研究. 情报科学, 2018.
  • 梁晓敏, 等. 舆情时间中评论对象的情感分析及其关系网络研究. 情报科学, 2018.
  • 郭宇, 等. 基于情感分析的社会网络用户影响力模型研究. 情报科学, 2018.
  • Barabasi A-L. The origin of bursts and heavy tails in human dynamics. Natrue(London),2005,435:207-211.
  • 王澎. 人类在线行为的实证和建模. 安徽:中国科学技术大学,2010.

随着互联网迅速发展,社交网络发展为民众了解社会现象、舆情事件的重要平台,带来便利的同时,部分网民也会在互联网上宣泄情感,引起公共舆情事件。为了更好地进行舆情监控和情感预警,把握网民的情感趋向,基于人类行为动力学的舆情事件分析,探究舆情对象的情感变化和关系演化是很是必要的。数据库

人类个体行为是隐藏在许多复杂社会经济现象背后的驱动力,定量理解人类行为是现代科学的一个重要研究课题。2005年,Barabási研究显示人类行为间隔规律是高度非均匀的,称之服从幂律分布,并在《天然》发表了一篇文章,开创了“人类行为动力学”的新研究方向。目前,科学家经过大量的实证统计发现了一些人类行为,如邮件通信、短信通信、网页浏览、电影点播、微博事件等的时间间隔近似服从幂律分布,这种幂律分布特性不管在群体水平仍是个体水平上均可以获得证明。除了发现人类行为的时间间隔分布中普遍存在的幂律现象外,近年来证明研究发如今人类的空间运动行为中也存在幂律分布特性,如停留时间分布和出行距离分布。网络

常见的人类行为动力学分析包括:时间间隔分布、活跃性分析、时间间隔分布宽度、时间间隔重标度、交互周期与热度分析、交互的阵发性和记忆性分析等。刘海鸥等老师研究发现微博、QQ群、天涯论坛、人人网服从幂律分布以下图所示,代表在线社交活动少数人处于活跃状态,积极频繁地发布消息,而大部分红员活跃性较低,处于静默状态。app

梁晓敏等老师提出了以下图所示的舆情事件中评论对象的情感及关系分析模型,并分析了“魏则西事件”的负向情感指数演化趋势及关系网络。svg


二.时间间隔分布图绘制

为解释人类个体为什么具备高几率进行长时间停留的特征,一般会对个体在统计时间段内的平常活动事件序列进行分析。下图是一个典型的个体在一周内活动的状况,图中空白区域表示个体在某地点的停留,黑色竖线表示在不一样地点的出行。学习

幂律特性分析一般会获得以下图所示的图形,而它如何经过Python进行绘制呢?fetch

1.数据集
假设做者定义网络爬虫抓取了天涯社区某一个事件的992条回复信息,包括id、主题用户、评论点赞数、评论被追评数、评论内容、评论时间、积极情绪分数。如今须要绘制时间间隔分布图。ui

2.SQL语句
接着经过Python调用本地的MySQL数据库,并获取每一个评论时间的时间,而后绘制柱状图,其中SQL语句核心代码以下:

select zhutishijian,jijiqingxu from yq_ml order by zhutishijian;

包括评论时间和积极情绪分数,输出结果以下所示:

Python访问MySQL数据库的核心代码以下,本地数据库名为“20181228db”。

class lianjie(object):
    def __init__(self):
        pass
    def connect(self,hostaddress):
        self.conn = msd.connect(host = hostaddress,user = "root",passwd = "123456",db = "20181228db",charset = 'utf8')
        #cur = self.conn.cursor()
        return self.conn
    def guanbi(self):
        return self.conn.close()

3.时间间隔分布图完整代码
完整代码以下:

# -*- coding: utf-8 -*-
""" Created on Wed Dec 19 13:35:17 2018 @author: yxz yq """

import matplotlib.pyplot as plt
import MySQLdb as msd
class lianjie(object):
    def __init__(self):
        pass
    def connect(self,hostaddress):
        self.conn = msd.connect(host = hostaddress,user = "root",passwd = "123456",db = "20181228db",charset = 'utf8')
        #cur = self.conn.cursor()
        return self.conn
    def guanbi(self):
        return self.conn.close()
    
    
if __name__ == '__main__':
    lj = lianjie()
    ############################################调用数据##########################
    conn = lj.connect("localhost")
    cur=conn.cursor()
    sql = "select zhutishijian,jijiqingxu from yq_ml order by zhutishijian;"
    cur.execute(sql)
    data = cur.fetchall()
    
    print (data)
    
    time =[]
    score = []
    l1=[]
    for i in range (0,len(data)):
        time.append(data[i][0])
        score.append(data[i][1])
        l1.append(1)
    plt.subplot(711)
    plt.bar(time,l1,width=0.005,color='black')
    plt.yticks([])
    plt.xticks([])
    plt.show()

代码中time用于统计时间,l1用于绘制竖线,生成图形以下,图中空白区域表示个体回复在某个时刻的停留时间,黑色竖线表示在不一样时刻出现了回复行为,黑色竖线越多,该时刻的回复事件越活跃。

这是2019年的基础性文章,但愿对你们有所帮助,不喜勿喷,感谢Y与我一块儿付出。同时,寒假已开始了本身奋斗学习之路,但愿一个月的时间能坚持把英语、专业课巩固上来。考博之路很艰辛,且努力且珍惜。你我一块儿加油,也但愿读者给我投一票吧。我是59号,Eastmount,杨秀璋。
投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

(By:Eastmount 2019-01-22 下午2点 http://blog.csdn.net/eastmount/ )