作者: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中正确地标记和格式化。

1. import pandas as pd
2.
3. data_dir = 'C:/your_data_dir/'
4.
5. # load nodes csv to pandas dataframe
6. df_nodes = pd.read_csv(data_dir + 'nodes.csv', low_memory=False)
7. print(f"The nodes dataframe has shape {df_nodes.shape}")
8.
9. # load edges csv to pandas dataframe
10. df_edges = pd.read_csv(data_dir + 'edges.csv', low_memory=False)
11. print(f"The edges dataframe has shape {df_edges.shape}")

载入节点和边的csv文件的Python代码段。

加载原始Twitter数据后,先处理节点,然后处理边,并将两者保存为csv文件。

Gephi需要输入一个节点表格,第一列命名为“Id”,包含Twitter用户Id,第二列为“Label”,包含Twitter用户名。其他列都表示节点属性,可根据需求选择性录入。在下面的代码示例中,我纳入了一列Louvain集群(由Louvain社区检测算法得出,可在networkx中实现)和一列Twitter用户跟随者数。处理节点的最后一步是将节点数据帧保存为csv,以便以后将其导入Gephi。

1. # select necessary columns for list of nodes with attributes
2. df_nodes = df_nodes.loc[:, ['user_id', 'user_screen_name', 'cluster', 'user_followers_count']].drop_duplicates('user_id')
3. print(f"This nodes dataframe has shape {df_nodes.shape}")
4.
5. # Label "Id" and "Label" columns
6. df_nodes['Id'] = df_nodes['user_id']
7. df_nodes['Label'] = df_nodes['user_screen_name']
8. # Arrange dataframe so first column is "Id" and second is "Label". All other columns are node attributes.
9. df_nodes = df_nodes.loc[:, ['Id', 'Label', 'cluster', 'user_followers_count']]
10. print(f"the first five rows of the nodes dataframe look like this {df_nodes.head(5)}")
11.
12. # Save labeled and formatted nodes dataframe as a csv for Gephi
13. df_nodes.to_csv(data_dir + 'nodes.csv', index=False, encoding='utf-8')

处理Gephi节点的Python代码段。

接下来,对于边数据的表格,与节点类似,Gephi导入时需要有特定的标记并对数据排序。前两个必需的列是“Source”和“Target”,表示参与转发的Twitter用户对。第三列是“Type”,在这个Twitter示例中设定为“directed”,因为我们处理的是转发数据。第四列是“Label”,在本例中是一个简单的索引。第五列是最重要的,命名为“Timeset”,包含转发的创建时间——注意是iso格式。“Timeset”列是时间变量,将用于在Gephi中设置网络图的动画。最后一列“Weight”是可选的,Gephi默认为“1”。最后,边数据帧可以保存为csv,以便导入Gephi。

1. # Label columns as "Source" and "Target"
2. df_edges['Source'] = df_edges['retweeter']
3. df_edges['Target'] = df_edges['retweetee']
4.
5. # Add columns for type, weight and label
6. df_edges['Type'] = 'directed'
7. df_edges['Weight'] = 1
8. df_edges['Label'] = [i for i in range(1, df_edges.shape[0]+1)]
9.
10. # Label the retweet time column "Timeset" and format time in isoformat
11. df_edges['retweet_created_at'] = pd.to_datetime(df_edges['retweet_created_at'], utc=True)
12. df_edges[r'Timeset'] = df_edges['retweet_created_at'].apply(lambda x: x.isoformat())
13. print(f"the time is in this format {df_edges[r'Timeset'].head(3)}")
14.
15. # Arrange edges dataframe and verify that the format is correct.
16. df_edges = df_edges.loc[:, ['Source', 'Target', 'Type', 'Label', r'Timeset', 'Weight']]
17. print(f"this dataframe has shape {df_edges.shape}")
18. print(f"the first five rows look like this {df_edges.head(5)}")
19.
20. # Save edges dataframe as csv for import into Gephi.
21. df_edges.to_csv(data_dir + 'edges.csv', index=False, encoding='utf-8')

处理Gephi中边数据的Python代码段。

现在节点和边数据的电子表格已经格式化和标记了,可以通过“导入电子表格”菜单选项导入Gephi。从节点开始,下面的屏幕截图显示了第一个导入菜单,其中分隔符应为“逗号”,导入选项应为“节点表”,编码应为“UTF-8”。

节点的Gephi电子表格导入界面。

下一步是选择要导入的列并为属性列指定数据类型。注意在时间表示(Time representation)的下拉菜单中选择“Timestamps”,这对于以后导入时间戳边数据非常重要。

节点导入过程通过将节点添加到新的Gephi工作区来完成

接下来,从“边”电子表格添加边数据。在下面的截图中看到的边导入过程与节点导入过程类似;唯一的区别是选择了“边表(Edges table)”的导入选项。

Gephi电子表格导入边数据

下面的屏幕截图显示了第二个导入屏幕,其中我们将时间表示指定为“Timestamps”,并将“Timeset”列的数据类型指定为“TimestampSet”。

边数据导入过程的最后一步是将边数据合并到已导入的节点工作区。在Gephi的数据实验室中,边数据表应该是可见的,如下面的屏幕截图所示,“时间戳(Timestamp)”将以iso格式出现。

Gephi的边数据截图。

像我以往的程序一样,我在导入的网络图上应用了一个力导向算法来布局节点,并选择了用于着色和调整节点大小的属性。在下面的“概述(Overview)”窗口中,所设计的网络图在下面显示一个宽条,显示“启用时间线(Enable timeline)”选项。

Twitter转发网络图

只需选择“启用时间线”,会显示一个勾选的数字时间条,如下所示。左下角的设置轮允许设置时间格式,我从中选择“Datetime”。

调整时间格式设置的屏幕截图。

只需使用光标选择时间间隔窗口的大小,然后按播放键。

使用光标调整时间窗口的大小并拖动到所需的开始位置。按“播放”开始动画

如前所述,我使用CloudApp创建动画网络的截屏gif,然后与我的共同作者共享。就这样!只需一点Python代码,就可以很容易地修改网络数据,以便在Gephi中对其进行动画处理。

我希望这篇教程是有帮助的,如果是的话,可以考虑在下面留下评论,这样我就知道大家对这个话题和/或这种风格的文章感兴趣。欢迎您提出任何问题和评论,请随时通过Linkedin与我联系。

原标题:

Animate Dynamic Graphs with Gephi Data visualization tutorial on animating time-dynamic behaviour in social network graphs.

原文链接:

https://towardsdatascience.com/animate-dynamic-graphs-with-gephi-d6bd9faf5aec

编辑:于腾凯

校对:林亦霖

译者简介

车前子,北大医学部,流行病与卫生统计专业博二在读。从临床医学半路出家到数据挖掘,感到了数据分析的艰深和魅力。即使不做医生,也希望用数据为医疗健康做一点点贡献。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

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

  1. pr图形模板预设怎么使用_PR怎样安装动态图形模板?怎样调用Mogrt预设?Premiere导入MOGRTs预设完整教程...

    Mogrts是一动态图形模板是一种可在 After Effects 或 Premiere Pro 中创建的文件类型 (.mogrt).可以帮助用户轻松使用PR编辑简单特效动画.下面是小编为大家整理的p ...

  2. python图形绘制星空图_Python数据可视化教程:基于Plotly的动态可视化绘图

    1. plotly 介绍 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图, 下面我们以jupyter ...

  3. R语言数据可视化教程(ggplot2)_其他图形

    # 13.其他图形 # 13.1 绘制相关矩阵图 mtcars mcor <- cor(mtcars) # 输出mcor,保留两位小数 round(mcor,digits = 2) # 如果数据 ...

  4. Python数据可视化教程:基于Plotly的动态可视化绘图

    1. plotly 介绍 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图, 下面我们以jupyter ...

  5. unity3d学习笔记-动画(1.Unity 中动画的基本原理)

    一.创建动画 在 Unity 中,单个动画存储在一个名为Animation Clip的资源中.它们与创建剪辑时选择的对象相关联,并存储用于创建特定动画的所有数据.动画剪辑可以是任意时间长度,单个游戏对 ...

  6. R语言数据可视化教程(ggplot2)_坐标轴设置

    # 8.坐标轴 # 8.1交换x轴和y轴 # 使用coord_flip()来翻转坐标轴 library(ggplot2) ggplot(PlantGrowth,aes(x=group,y=weight ...

  7. UE4大数据可视化教程(10)——设置背景音乐和播放MP3格式音乐

    目录 设置背景音乐 播放MP3格式音乐 设置背景音乐 将wav格式音乐拖入UE4,然后新建一个Sound_Cue,拖入场景 打开Sound_Cue,连接wav格式音乐,勾上循环

  8. java groovy 动态计算_计算Java / Groovy中的经过时间

    您可以使用除法和mod进行所有这些操作. long l1 = start.getTime(); long l2 = stop.getTime(); long diff = l2 - l1; long ...

  9. 用SVG技术实现动态图形输出的嵌入式Web服务

    摘   要  本文结合控制系统对嵌入式Web服务器的要求,分析了嵌入式Web服务器的基本原理.动态内容实现方法,并结合实例着重介绍了基于SVG技术实现动态图形输出的方法. 关键字  嵌入式系统  SV ...

最新文章

  1. firewalled centos7
  2. 不用软件,对回收站删除文件后的恢复(windows 高级技巧)
  3. switch 没有default_「java面试」switch究竟怎么用,不要让它吃灰了!
  4. php框架laravel:数据库建立:artisan
  5. win10 远程桌面卡顿_Win10系统远程桌面连接缓慢卡顿解决措施
  6. CodeForces - 888C K-Dominant Character 思维
  7. 计组之中央处理器:4、硬布线控制器的原理与设计
  8. 连续出现的字符(信息学奥赛一本通-T1148)
  9. MapReduce之join操作
  10. redis连接被拒绝
  11. pytorch torch.stack
  12. [游戏] - 游戏教程
  13. Linux服务器数据备份恢复策略
  14. 斯坦福大学的Gss Audio Codec 调试分析
  15. 刀下留人--苹果开发者账号封号前挽救
  16. python的unicode编码表_Python-编码
  17. opencv+海康威视网络摄像头实时预览+抓图(环境配置加程序)
  18. 青龙面板之B站任务天选时刻
  19. [人工智能-深度学习-35]:卷积神经网络CNN - 常见分类网络- GoogLeNet Incepetion网络架构分析与详解
  20. API网关(什么是API网关、如何设计统一网关?)

热门文章

  1. win7查看隐藏文件夹
  2. 网格化运维标书_运维网格化管理.ppt
  3. 零基础学爬虫大概多久?
  4. 在win10中查看plt文件
  5. 双堆1.数据流的中位数
  6. 用Python给PDF批量加密
  7. 微软壁纸。我全部都要
  8. php百度坐标转腾讯坐标,PHP实现腾讯与百度坐标转换
  9. 21 个令程序员泪流满面的瞬间
  10. 【机器学习】Python秘密武器之Numpy