介绍


北京大学 PKUVIS 微博可视分析工具 (WeiboEvents) 是北京大学可视化与可视分析研究组开发的微博传播分析工具。它通过直观的视图清晰地呈现出一个事件中微博转发的过程,让您能够迅速地发现事件中的关键人物、关键微博、重要观点,同时通过可视化的方式帮助您更好地分析新浪微博中事件的发生与发展过程。

您可以与这个神奇的页面进行交互,不仅可以看到故事发展的全貌,还可以像一个真正的侦探一样发掘出故事背后的秘密。

操作详解


主界面

下图是本工具的主界面。

  • 微博传播视图: 每个节点代表一条微博,连线代表转发关系,可视化展示微博传播的过程。
  • 工具栏: 一些常用的功能,如切换视图、缩放等。
  • 时间线: 显示单位时间微博的数量。
  • 面板: 包括详细的视图参数、微博过滤器、关键词以及统计图表、用户列表等。

视图模式

微博传播视图中有帆状视图、树状视图和圆环视图三种模式,可以在工具栏中通过, , 按钮切换。

  • 帆状视图: 横轴为时间,纵轴为转发关系。
  • 树状视图: 传统的树形结构,仅显示转发关系。
  • 圆环视图: 可交互的圆环形视图,每个圆环中心为重要节点,周围是该节点的转发。圆环之间连线表示重要节点间的转发关系。

视图的移动与缩放

通过, , , , , 工具配合视图上的光标操作可以调整视图位置与大小。

  • 缩放: 选中后,可以在视图中拖动光标,选中区域并放大。
  • 移动: 选中后,可以在视图中拖动光标,平移视图。
  • 放大、 缩小: 放大/缩小视图。
  • 撤销: 回到上一个视图。
  • 复位: 回复默认视图。

CSV 数据说明


下载到的数据为 UTF-8 编码的 CSV 格式,Microsoft Excel 即可打开。

字段名称说明
id微博的 ID
mid微博的 MID
uid微博作者的 UID
parent该条微博直接转发微博的 MID
type微博的类型,暂无用处
t微博发布时间,Unix Timestamp,即自 1970 年 1 月 1 日 00:00:00 UTC 时间以来的秒数
comments_count微博的评论数
reposts_count微博的转发数,这个转发数是新浪给出的,可能和抓取到的数据中转发数有所不同
user_created_at微博作者创建时间,Unix Timestamp
followers_count微博作者的粉丝数
statuses_count微博作者的微博数
friends_count微博作者的关注数
username微博作者的用户名
user_description微博作者的用户描述
city微博作者的城市编号,具体请查阅新浪 API 文档
province微博作者的省份编号
gender微博作者的性别,m 为男,f 为女,n 为未知
verified微博作者是否已加 V
verified_reason微博作者加 V 原因
verified_type微博作者加 V 类型
original_text微博原始文本
text作者本人文本(去掉第一个 //@ 后面的内容)
words分词结果,暂为空
emotion情感值,暂为空

自定义图表


WeiboEvents 提供一个自定义图表的功能,您可以用自己的算法计算统计量,然后用可视化或文本呈现。

目前我们支持的图表有直方图,更多图表类型将随后加入。

要使用这个功能,您需要输入一段 Javascript 代码,像下面这样:

function(fx, tweets) {
  // 这里可以写一段 Javascript 代码,用自定义的算法计算统计信息然后绘图。
  // fx 中包括一些常用函数,如 fx.min, fx.max 等。
  // tweets 是所有微博构成的数组。

  // 在这里编写代码,实现您的算法,生成图表或文本信息。
  // fx.print(text): 输出文本
  // fx.draw(graph): 绘制图表
}
// 注意: 不要添加多余的变量或函数,一切应在上面的函数中完成。

示例代码

分别计算本事件中男、女、VIP 用户的平均粉丝数,并可视化。

function(fx, tweets) {
  // 我们想显示男女用户的平均粉丝数(VIP单独计算)。
  // 生成一个数组,每个元素表示用户的性别
  var names = ["Male", "Female", "VIP", "unknown"];
  var classes = ["m", "f", "v", "n"];
  var get_class = function(tweet) {
    if(tweet.verified) return "v";
    if(tweet.gender == "m" || tweet.gender == "f") return tweet.gender;
    return "n";
  };
  var data = classes;
  var weights = classes.map(function(c) {
    var c_tweets = tweets.filter(function(t) { return get_class(t) == c; });
    if(c_tweets.length == 0) return 0;
    return fx.mean(c_tweets, fx.$pick("followers_count"));
  });
  // 如有需要,可以打印调试信息。
  fx.print("微博总数: " + tweets.length);
  // 调用 draw 函数生成图表,多次调用可生成多个。
  fx.chart({
    title: "My Custom Chart",  // 标题
    type: "bars",              // 类型,这里使用条形图
    names: names,              // 每一条的显示名称
    values: classes,           // 每一条的内部名称
    data: data,                // 数据项
    weights: weights           // 数据项的权重(可选参数,默认全1)
  });
}

详细文档

我们在 fxtweets 参数中提供您所需要的工具和数据。

工具函数

fx 参数中包含很多实用的工具函数。

fx.print

fx.print(string/object) 函数用于输出字符串或用 JSON 形式输出对象。

fx.print("Hello World!");  // 输出 Hello World!
fx.print({ a: 1, b: 2 });  // 输出 {"a":1,"b":2}

fx.draw

fx.draw(info) 函数用于输出图表。其中 info 是一个对象,包括图表所需要的信息。

条形图
info = {
  type: "bars",         // 图表类型: 条形图为 bars
  title: "Title",       // 标题,可选
  names: [ "name1", "name2", ... ],         // 每一条的名称
  values: [ value1, value2, ... ],          // 每一条对应的数值或文本
  data: [ data_value1, data_value2, ... ],  // 数据
  weights: [ weight1, weight2, ... ]        // 权重,可选,默认全为 1
}
// 条形图的画法是: 将每一条对应的数据的权重求和,对应到每条的长度。

fx.min, fx.max, fx.mean, fx.sum, fx.std, fx.variance

这些函数分别用于计算最小值、最大值、平均值、求和、标准差、方差。用法如下示例:

// 普通数值数组
var data = [ 1, 2, 3, 4, 5 ];
var m = fx.mean(data); // m = 3
var s = fx.max(data);  // m = 5

// 对象数组,第二个参数传递函数对象,用于获取属性值
var data = [ { a: 2, b: 4 }, { a: 1, b: 3 } ]
var m = fx.max(data, function(d) { return d.a; });     // m = 2
var m = fx.max(data, function(d) { return d.b * 2; }); // m = 8

微博元素属性

tweets 数组中包含每个微博的信息,每条微博是一个 Javascript 对象,这个对象和导出 CSV 时的微博对象大致相同,但有所区别,具体有如下属性:

属性名称说明
id微博的 ID
mid微博的 MID,ID 和 MID 一般是一样的,我们内部都用 MID
original_text微博原始文本
text作者本人文本(去掉第一个 //@ 后面的内容)
parent该条微博直接转发微博的 ID,0 表示原微博
children数组,子微博的 MID 列表
type微博的类型,暂无用处
t微博发布时间,Unix Timestamp,即自 1970 年 1 月 1 日 00:00:00 UTC 时间以来的秒数
comments_count微博的评论数
reposts_count微博的转发数,这个转发数是新浪给出的,可能和抓取到的数据中转发数有所不同
uid微博作者的 UID
username微博作者的用户名
user_description微博作者的用户描述
gender微博作者的性别,m 为男,f 为女,n 为未知
user_created_at微博作者创建时间,Unix Timestamp
followers_count微博作者的粉丝数
statuses_count微博作者的微博数
friends_count微博作者的关注数
city微博作者的城市编号,具体请查阅新浪 API 文档
province微博作者的省份编号
verified微博作者是否已加 V
verified_reason微博作者加 V 原因
verified_type微博作者加 V 类型
words分词程序得到的分词结果
emotion计算的情感值

北京大学微博可视分析系列

Copyright 2012-2015, Peking University, All rights reserved.