9分钟阅读
R和Gephi中的社会网络分析。挖掘Twitter
由于技术的快速发展,在社交网络上产生的大量数据可以相对容易地进行分析,特别是对于那些使用R编程语言和Gephi的人。
作者
作者
胡安是布宜诺斯艾利斯大学的一名讲师。他的研究重点是人工智能、NLP和社会网络。他有超过十年的数据科学经验,并在ML会议上发表过论文,包括SPIRE和ICCS。
分享到
共享(SHARE
社会网络分析诞生于1934年,当时Jacob Levy Moreno创造了社会图,即社会互动的抽象。具体来说,社会图是一个图,其中每个节点代表一个人,边代表他们之间的互动。莫雷诺用社会图来研究小群人的行为。
为什么是小群体?因为在他工作的那个时代,很难获得大量个人互动的细化信息。这种情况随着在线社交网络(如Twitter)的出现而改变。如今,任何人都可以免费下载大量的推特数据,这为有趣的分析打开了大门,推动我们对我们的行为方式和各种行为对社会的影响有了新的认识。
在我们的社会网络分析系列的第一部分,我们将演示如何使用R语言来获得和预处理数据,并使用Gephi来产生惊人的可视化效果,来进行一些这样的分析。Gephi是一个开源的应用程序,专门设计用于可视化任何类型的网络。它使用户能够通过几个标准和属性轻松配置可视化。
在R中下载用于社会网络分析的Twitter数据
如果你没有一个Twitter的开发者账户,请创建一个,并申请Essential权限。然后,为了下载Twitter数据,请在Twitter开发者门户中创建一个应用。接下来,在 "项目和应用 "部分选择你的应用,然后进入 "密钥和令牌 "标签。在那里你必须生成你的凭证。这些将被用来访问Twitter的API和下载数据。
一旦你生成了你的证书,你就可以开始分析了。我们将使用三个R库。
你可以用install.packages() 函数来安装这些库。为了我们的目的,我们将假设你已经安装了R和RStudio,并且你对它们有一个基本的了解。
在我们的演示中,我们将分析关于著名的阿根廷足球运动员梅西在巴黎圣日耳曼(PSG)足球俱乐部第一周的激烈的网上讨论。值得注意的是,使用免费的Twitter API,你只能下载当前日期之前七天的推文。你将无法下载我们引用的相同数据,但你将能够下载当前的讨论。
让我们开始下载。首先,我们将加载库,然后使用凭证创建一个授权令牌,最后设置下载标准。
这个代码块详细说明了如何实现这三个步骤。
## Load libraries
library(rtweet)
library(igraph)
library(tidyverse)
## Create Twitter token
token <- create_token(
app = <YOUR_APP_NAME>,
consumer_key = <YOUR_CONSUMER_KEY>,
consumer_secret = <YOUR_CONSUMER_SECRET>,
access_token =<YOUR_ACCESS_TOKEN>,
access_secret = <YOUR_ACCESS_SECRET>)
## Download Tweets
tweets.df <- search_tweets("messi", n=250000,token=token,retryonratelimit = TRUE,until="2021-08-13")
## Save R context image
save.image("filename.RData")
注意。 用你在前面的凭证步骤中创建的信息替换<>之间的所有标签。
通过这段代码,我们在Twitter API上查询了所有包含 "messi "这个词并且在2021年8月8日和2021年8月13日之间发布的推文(最多25万条)。我们设置了25万条推文的限制,因为Twitter需要一个数量值,而且这个数字足够大,可以进行有趣的分析。
Twitter的下载速度是每15分钟45,000条推文,所以下载250,000条推文需要一个多小时。
最后,我们将所有的上下文变量保存在一个RData文件中,以便在我们关闭RStudio或关闭机器时能够恢复它。
创建交互图
一旦下载完成,我们将在tweets.df 数据框架内获得推文。这个数据框架矩阵包含每条推文一行,每条推文字段一列。首先,我们将用它来创建互动图,其中每个节点代表一个用户,边代表他们之间的互动(转发或提及)。通过tidyverse和igraph,我们可以快速创建这个图,而且只用一条语句。
## Create graph
filter(tweets.df, retweet_count > 0) %>%
select(screen_name, mentions_screen_name) %>%
unnest(mentions_screen_name) %>%
filter(!is.na(mentions_screen_name)) %>%
graph_from_data_frame() -> net
执行这一行后,我们在net 变量中就有了一个图形,可供分析。例如,看看有多少节点和边。
summary(net) # IGRAPH fd955b4 DN-- 138963 217362 --
我们的样本数据产生了138,000个节点和217,000条边。这是一个很大的图。如果我们想的话,我们可以通过R生成可视化,但根据我的经验,它们的计算时间太长,而且在视觉上不如Gephi的可视化效果好。因此,我们还是用Gephi来进行吧。
用Gephi实现图形的可视化
首先,我们需要创建一个Gephi可以读取的文件。这很容易,因为我们可以使用write_graph 函数生成一个.gml 文件。
write_graph(simplify(net), "messi_network.gml", format = "gml")
现在,打开Gephi,进入 "打开图形文件",搜索messi_network.gml 文件,并打开它。它将抛出一个总结图形信息的窗口。选择接受。这就会出现。
在Gephi中打开一个新的图形文件
不用说,这不是很有信息量。这是因为我们还没有应用一个布局。
网络布局
在一个有数以千计的节点和边的图形中,在图形中定位节点是至关重要的。这就是布局的目的。它们将节点放置在由定义的标准设定的位置上。
对于我们的社会网络分析教程,我们将使用ForceAtlas2布局,它是这种分析的标准选项。它通过模拟节点之间的吸引和排斥的物理力来定位节点。如果两个节点相连,它们就会相互靠近;如果它们不相连,它们就会相距较远。这种布局在社区方面产生了一个信息图,因为属于同一社区的用户将被分组在一起,而来自不同社区的用户将在不同的区域。
为了将这种布局应用于我们的案例,我们导航到布局窗口(在左下角),选择ForceAltas 2,然后点击运行。当你这样做时,你会看到节点开始移动并形成许多 "云"。几秒钟后,你将有一个非常稳定的模式,你就可以点击停止。请注意,自动停止可能需要很多时间。
由于这是一个随机的算法,你在每次运行中都会有稍微不同的输出。你的输出应该与此相似。
使用ForceAtlas2布局的单色Gephi输出
该图开始看起来很吸引人了。现在让我们为它添加一些颜色。
社区检测
我们可以用几个标准来给节点上色;最标准的方法是按社区。如果我们的图中有四个社区,我们将有四种颜色。通过颜色,在你的数据下,我们更容易理解群体之间的互动。
要给节点着色,首先我们要确定社区。在Gephi中,点击统计选项卡下的窗口中的模块化按钮--这个按钮应用了流行的鲁汶图聚类算法,这是目前最快的算法之一,由于其高性能而被认为是最先进的算法。在出现的窗口中,点击接受。另一个窗口将出现,包含一个按大小分布的社区散点图。现在我们在每个节点中都有一个新的属性,名为模块化类,它包含了用户所拥有的社区。
在完成了前面的步骤后,我们现在可以按群落给图着色。要做到这一点,在外观选项卡中,点击应用。
使用Gephi的外观来添加颜色
在这里,我们可以看到每个社区的规模(以用户百分比计算)。在我们的案例中,主要社区(紫色和绿色)分别包含总人口的11.34%和9.29%。
使用当前的布局和调色板,图表将看起来像这样。
有颜色的图可以让我们轻松地识别不同的社区。
推特影响者检测
最后,我们想确定讨论中的主要参与者,以了解,例如,谁属于哪个社区。我们可以通过不同的属性来衡量每个用户的影响力;其中之一是通过他们的程度。这表明有多少用户转发或提及他们。
为了突出有大量互动的用户,我们将使用程度属性改变节点的大小。
改变Gephi中的Degree属性
现在,图表将把有影响力的人显示为由较大圆圈代表的节点。
彩色的输出显示影响者为较大的结点
现在我们已经确定了有大量互动的用户,我们可以揭示他们的名字。要做到这一点,请点击屏幕底部栏中的黑色箭头。
在Gephi中访问标签配置
然后,点击标签和配置。在出现的窗口中,选择 "名称 "复选框并点击接受。接下来,点击节点复选框。图中会出现小黑线。这些是所有用户的名字。但我们并不想看到所有的人,只想看到最重要的人。
为了定义它们,使用我们用于节点大小的同一窗口,按节点程度改变它们的大小。我们把最小尺寸从0.1增加到10,把最大尺寸从10增加到300。
随着名字的增加,图表的信息量大大增加,因为它显示了不同社区与影响者的互动。
添加名字可以让我们看到不同社区与影响者的互动情况。
我们现在对这个特定的Twitter讨论有了更多的了解。例如,绿色社区包含了像mundodabola和nymarjrdepre这样的账户,显示了它在巴西的地位。橙色和灰色社区包含像sc_espn和InvictosSomos这样讲西班牙语的用户。特别是,灰色和黑色社区似乎是讲西班牙语的,因为它们有像IbaiOut、 LaScaloneta和流行的流媒体人IbaiLlanos的用户。最后,紫色和红色社区似乎是讲英语的,因为它们有ESPNFC和brfootball等账户。
现在我们可以更好地理解为什么这些用户在社会学方面构成了不同的社区,而不仅仅是图计算方面。他们说的是不同的语言!他们都在推特上谈论梅西和他的新球队,但说西班牙语的人与其他说西班牙语的人的互动要比说葡萄牙语或英语的人多,这也是有道理的。此外,我们也可以理解,即使灰色和橙色社区说西班牙语,他们也是从不同的角度说的。灰色社区使用一种更幽默的方式,这也解释了为什么他们之间的互动多于与官方足球或记者账户的互动。
发掘R和Gephi的潜力
如果我们没有使用Gephi来做图,我们可以使用R的Ggplot库。然而,从我的角度来看,该库在网络绘图方面的局限性更大。它不像Gephi那样是动态的,它更难配置,而且所产生的显示效果也不那么清晰。
在本系列的其余部分,我们将进一步进行分析。我们将进行一些话题建模的文本分析,看看用户有多少话说,哪些话题是他们感兴趣的;我们将进行情感分析,看看他们是积极的还是消极的;我们还将进行更深入的图形分析,分析Twitter最大的影响者。
你可以用这些步骤来分析新的Twitter讨论,看看你能从情节图中获得什么启示。
了解基础知识
R语言是用来做什么的?
R最初是为统计分析和学术研究人员设计的。然而,如今它被广泛用于更多的用途,如机器学习开发或动态报告设计。
Python比R好吗?
这取决于。两者都是伟大的语言,都有巨大的社区支持它们。有些功能在R语言中有更好的库,有些则在Python中。
R语言容易吗?
是的,R是一种高级语言,最初是为没有丰富编程知识的用户设计的,比如数学家和物理学家。这就是为什么它是一种非常用户友好和容易学习的语言。
社会网络分析的用途是什么?
社会网络分析被用来了解人们如何互动以及他们互动的性质。它可以用来寻找新的客户、市场、合作伙伴,甚至是投资者。
社会网络分析的基本步骤是什么?
首先,你从在线社交网络中获得数据,然后构建一个互动图,开始分析网络行为。
社会网络分析是定性的还是定量的?
两者都可以,这取决于你的背景。工程师可以进行定量分析,而社会学家可以进行定性分析。
什么是社会图?
社会图是一种图形,其中每个节点是一个人,边代表他们之间的相互作用。
为什么社会图很重要?
社会图很重要,因为它们给我们提供了一个关于人们在巨大群体中如何互动的抽象(和说明)。它们很简单,但却相当有意义。它们帮助我们从许多角度理解社会,如用户中心度、信息传播、社区识别等等。
标签
视觉化社会网络Twitter
自由职业者? 寻找你的下一份工作。
[
查看完整资料
](www.toptal.com/resume/juan…)
Juan Manuel Ortiz de Zarate
数据科学家
关于作者
目前,胡安是布宜诺斯艾利斯大学的博士生,研究的课题是人工智能、NLP和社交网络。他有超过十年的专业发展经验。在过去的几年里,他一直沉浸在各种类型的数据科学项目中,并喜欢这其中的每一分钟。胡安乐于接受数据问题,建立预测模型,并学习最先进的技术。
评论
请启用JavaScript以查看由Disqus提供的评论。评论由Disqus提供
世界级的文章,每周交付。
获得伟大的内容
订阅意味着同意我们的隐私政策
谢谢您!
请查看您的收件箱以确认您的邀请。
热门文章
使用更智能的缓存,将地图集群的服务速度提高50倍
工程图解Chevron后端
用树莓派恒温器教程控制你的气候
8个自动化测试的最佳实践以获得积极的测试体验
编写《使用Redux工具包和RTK查询创建React应用程序》。
查看我们的相关人才
自由职业者? 寻找你的下一份工作。
聘请作者
[
查看完整资料
](www.toptal.com/resume/juan…)
Juan Manuel Ortiz de Zarate
数据科学家