独家 | 使用Gephi设置动态图形动画——在社会网络图中动画化时间动态行为的数据可视化教程...


作者:Haaya Naushan

翻译:车前子

校对:欧阳锦

本文约3300字,建议阅读7分钟

Gephi可视化Twitter网红的转发行为随时间的变化。

谈到分析社交网络,我之前的文章主要是关于自然语言处理(natural language processing , NLP),或者更具体地说是阿拉伯语NLP。然而Tweet不仅仅是文本数据,它们代表Twitter用户之间的网络连接。添加网络分析,允许在社交媒体数据的内容和行为之间进行综合;因此,将网络和文本数据结合起来,就可以对社交媒体网络有更细致的理解。

我的Python学习之旅是出于需求而开始的,目标是使Twitter网络图生动起来,而编码似乎就是解决方案。因此,我的第一个脚本是与pandas的一场殊死搏斗——为了创建一个能在Gephi(一个流行的开源图形可视化软件)使用的简单csv。几个月后,阅读我最初的代码成了我的动力,改进第一个脚本成为了教我谦卑的功课。

最近,我在与世界银行的研究人员合作进行黎巴嫩调查时使用了改进后的脚本。在领域内知识和专业技术的指导下,我分析了一个Twitter标签“# لبنان_ينتفض”(译:黎巴嫩的崛起)。数据收集时间较长:始于2019年“十月革命”的第一次抗议活动,期间发生了2020年8月贝鲁特爆炸,直到2020年11月结束。

作为调查的一部分,我观察了Twitter网红的转发网络,有人建议我把注意力集中在特定时段,所以我最初的方法是创建静态快照。然而,数据的时间特性促使我将转发行为的时间动态可视化。多亏了我的第一个脚本,我能够使用最基本的Python和Gephi创建几个像上面例子那样的动画图形,。在那之后,我通过使用CloudApp创建屏幕截图gif,导出我的时间动态Twitter网络动画。

在这个简短的数据可视化教程中,我将概述创建网络数据动画所需的步骤和最简代码。我将以Twitter为例,但同样的过程也可以用于其他社交媒体网络。由于本教程的重点是数据可视化,因此我将跳过对数据收集过程的解释。尽管如此,我在“Twitter脚本抓取初学者知识要点分享”中介绍了如何收集本教程所需的数据。https://gist.github.com/haayanau/63d03cad7db813a3f77577038c3f0d5f

Gephi有几个选项用于从数据库加载网络数据,或者以图形文件格式(如.graphml,或 .gexf)加载网络数据。然而,对于动态图,最简单的选择是将数据从正确标记和格式化的电子表格加载到Gephi中。在网络图术语中,“节点”表示单个Twitter用户,“边”表示用户之间的转发连接。我从节点和边缘csv文件开始,这些文件是用Python中的networkx工具从未处理的原始Twitter数据创建的。这篇优秀的文章解释了如何开始可视化Twitter网络,包括如何使用networkx创建节点和边。

下面的代码片段显示了如何从节点和边csv文件加载Twitter数据,以便它们可以在Python

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要利用weibo.json文件进行关系图可,可以使用一些数据工具,比如D3.js、Gephi、Tableau等。以下是一个使用D3.js实现的简单示例: 1. 首先,需要将weibo.json文件数据进行处理,转换成可以被D3.js识别的格式,比如JSON格式。 2. 接着,需要编写D3.js代码,实现数据的可。以下是一个简单的实现代码: ```javascript var width = 800; var height = 600; var svg = d3.select("body") .append("svg") .attr("width", width) .attr("height", height); d3.json("weibo.json").then(function(data) { var nodes = data.nodes; var links = data.links; var simulation = d3.forceSimulation(nodes) .force("link", d3.forceLink(links).id(function(d) { return d.id; })) .force("charge", d3.forceManyBody()) .force("center", d3.forceCenter(width / 2, height / 2)); var link = svg.selectAll("line") .data(links) .enter() .append("line"); var node = svg.selectAll("circle") .data(nodes) .enter() .append("circle") .attr("r", 5) .style("fill", "blue"); node.call(d3.drag() .on("start", dragstarted) .on("drag", dragged) .on("end", dragended)); simulation.on("tick", ticked); function ticked() { link.attr("x1", function(d) { return d.source.x; }) .attr("y1", function(d) { return d.source.y; }) .attr("x2", function(d) { return d.target.x; }) .attr("y2", function(d) { return d.target.y; }); node.attr("cx", function(d) { return d.x; }) .attr("cy", function(d) { return d.y; }); } function dragstarted(d) { if (!d3.event.active) simulation.alphaTarget(0.3).restart(); d.fx = d.x; d.fy = d.y; } function dragged(d) { d.fx = d3.event.x; d.fy = d3.event.y; } function dragended(d) { if (!d3.event.active) simulation.alphaTarget(0); d.fx = null; d.fy = null; } }); ``` 这段代码通过D3.js实现了一个力导向布局的关系图,将节点用圆圈表示,边用线段表示。每个节点代表一个微博用户,边代表两个用户之间的关注关系。可以通过拖动节点来改变节点的位置。 3. 分析所绘制的图。通过观察关系图,可以发现某些节点之间的连线比较密集,这代表这些用户之间的关注关系比较紧密;而有些节点之间的连线比较稀疏,这代表这些用户之间的关注关系比较松散。此外,还可以通过对节点的属性进行分析,比如节点的度心性、介数心性等指标,来进一步研究网络的拓扑结构和特征。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值