R 和 Gephi 中的社交网络分析:深入研究 Twitter

已发表: 2022-03-11

社交网络分析诞生于 1934 年,当时 Jacob Levy Moreno 创建了社会图,即社会互动的抽象。 具体来说,社会图是一个图,其中每个节点代表一个人,边代表他们之间的交互。 莫雷诺使用社会图来研究一小群人的行为。

为什么小? 因为在他工作的那个时代,很难获得大量个人互动的精细信息。 随着 Twitter 等在线社交网络的出现,这种情况发生了变化。 如今,任何人都可以免费下载海量的 Twitter 数据,这为有趣的分析打开了大门,促使我们对自己的行为方式以及各种行为对社会的影响有了新的认识。

在我们社交网络分析系列的第一部分中,我们演示了如何使用 R 语言执行其中一些分析以获取和预处理数据,以及如何使用 Gephi 生成令人惊叹的可视化。 Gephi 是一个开源应用程序,专门设计用于可视化任何类型的网络。 它使用户能够通过多个标准和属性轻松配置可视化。

下载 Twitter 数据以在 R 中进行社交网络分析

如果您没有 Twitter开发者帐户,请创建一个并申请基本访问权限。 然后,要下载 Twitter 数据,请在 Twitter Developer Portal 中创建一个应用程序。 接下来,在 Projects & Apps 部分中选择您的应用程序,然后转到 Keys & Tokens 选项卡。 在那里,您将不得不生成您的凭据。 这些将用于访问 Twitter API 和下载数据。

生成凭据后,您可以开始分析。 我们将使用三个 R 库:

  1. igraph ,创建交互图。
  2. tidyverse ,准备数据。
  3. rtweet ,用于与 Twitter 开发 API 通信。

您可以使用install.packages()函数安装这些库。 出于我们的目的,我们假设您已经安装了 R 和 RStudio,并且您对它们有基本的了解。

在我们的演示中,我们将分析著名的阿根廷足球运动员莱昂内尔·梅西在巴黎圣日耳曼 (PSG) 足球俱乐部的第一周内的激烈在线讨论。 请务必注意,使用免费的 Twitter API,您只能下载当前日期前 7 天的推文。 您将无法下载我们引用的相同数据,但您将能够下载当前讨论。

让我们从下载开始。 首先,我们将加载库,然后使用凭据创建授权令牌,最后设置下载条件。

此代码块详细说明了如何实现所有三个步骤:

 ## 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 日之间发布的所有推文(最多 250,000 条)。我们设置了 250,000 条推文的限制,因为 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 用户界面的屏幕截图,用户可以从中打开新的图形文件。
在 Gephi 中打开一个新的图形文件

不用说,这不是很丰富。 那是因为我们还没有应用布局。

网络布局

在具有数千个节点和边的图形中,在图形中定位节点至关重要。 这就是布局的目的。 他们将节点放置在由定义的标准设置的位置。

对于我们的社交网络分析教程,我们将使用 ForceAtlas2 布局,这是此类分析的标准选项。 它通过模拟它们之间的物理吸引力和排斥力来定位节点。 如果两个节点相连,它们将更靠近彼此; 如果它们没有连接,它们将相距更远。 这种布局产生了关于社区的信息图,因为属于同一社区的用户将被分组在一起,而来自不同社区的用户将位于不同的区域。

要将这个布局应用到我们的案例中,我们导航到 Layout 窗口(在左下角),选择 ForceAltas 2,然后单击 Run。 当你这样做时,你会看到节点开始移动并形成许多“云”。 几秒钟后,您将拥有一个非常稳定的模式,您将能够单击停止。 请注意,自动停止可能需要很长时间。

由于这是一种随机算法,因此每次运行的输出都会略有不同。 您的输出应与此类似:

以黑白显示 ForceAtlas2 布局的输出的图像,生成的图形没有颜色或灰色阴影。
使用 ForceAtlas2 布局的单色 Gephi 输出

图表开始看起来很吸引人。 现在让我们为其添加一些颜色。

社区检测

我们可以使用几个标准为节点着色; 最标准的方法是社区。 如果我们的图表中有四个社区,我们将有四种颜色。 通过颜色,根据您的数据,可以更轻松地了解组的交互方式。

要为节点着色,首先我们必须识别社区。 在 Gephi 中,单击统计选项卡下窗口中的模块化按钮 - 此按钮应用流行的 Louvain 图聚类算法,这是最快的可用算法之一,因其高性能而被认为是最先进的。 在出现的窗口中,单击接受。 将出现另一个窗口,其中包含按大小分布的社区的散点图。 现在我们在每个节点中都有一个名为 Modularity Class 的新属性,其中包含用户拥有的社区。

完成前面的步骤后,我们现在可以按集群为图着色。 为此,在外观选项卡中,单击应用。

在 Gephi 工作区中显示“外观”选项卡的屏幕截图。该图像显示了图表中使用的一系列颜色。
使用 Gephi 的 Appearance 添加颜色

在这里,我们可以看到每个社区的规模(以用户百分比计)。 在我们的案例中,主要社区(紫色和绿色)分别占总人口的 11.34% 和 9.29%。

使用当前布局和调色板,图表将如下所示:

彩色图表的图像。形状与之前的单色图相同,但颜色有助于识别特定社区,最大的社区(紫色)位于左下角,第二大的社区(绿色)位于右上角。在它们之间,较小的社区由其他颜色表示,包括青色、橙色、红色和黑色。
彩色图表使我们能够轻松识别不同的社区。

Twitter 影响者检测

最后,我们想确定讨论中的主要参与者,以了解例如谁属于哪个社区。 我们可以通过不同的属性来衡量每个用户的影响力; 其中之一是他们的学位。 这表明有多少用户转发或提及了他们。

为了突出具有大量交互的用户,我们将使用 Degree 属性更改节点的大小:

在前面图中提到的相同外观选项卡下,显示如何更改 Gephi 中的 Degree 属性的屏幕截图。最小尺寸设置为 0.1,最大尺寸设置为 10。
更改 Gephi 中的 Degree 属性

该图现在将影响者显示为由较大圆圈表示的节点:

与上一张类似的彩色图表图像,但添加了代表影响者节点的圆圈。每个颜色组都有几个这样的节点。
将影响者显示为较大节点的彩色输出

现在我们已经确定了具有大量交互的用户,我们可以透露他们的姓名。 为此,请单击屏幕底部栏中的黑色箭头:

Gephi 工作区的屏幕截图,显示 UI 右下角的黑色箭头。
在 Gephi 中访问标签配置

然后,单击标签和配置。 在出现的窗口中,选择名称复选框并单击接受。 接下来,单击节点复选框。 图中将出现小黑线。 这些是所有用户的名称。 但我们不想看到所有这些,只想看到最重要的。

要定义它们,请使用我们用于节点大小的同一窗口按节点度数更改它们的大小。 我们将最小尺寸从 0.1 增加到 10,并将最大尺寸从 10 增加到 300。

随着名称的添加,图表变得更加丰富,因为它显示了不同的社区如何与影响者互动:

彩色图表的图像,圆圈代表重要用户,最重要用户的名称覆盖在顶部。文本的大小对应于每个用户的大小(影响),其中一些最大的是紫色的 ESPNFC、灰色的 TrollFootball 和粉色的 PSG_inside。
添加名称可以让我们看到不同的社区如何与影响者互动。

我们现在对这个特定的 Twitter 讨论有了更多的了解。 例如,绿色社区将 mundodabola 和 neymarjrdepre 等账户纳入其中,揭示了其在巴西的轨迹。 橙色和灰色社区包含讲西班牙语的用户,例如 sc_espn 和 InvictosSomos。 特别是,灰色和黑人社区似乎讲西班牙语,因为他们拥有 IbaiOut、LaScaloneta 和流行的流媒体 IbaiLlanos 等用户。 最后,紫罗兰色和红色社区似乎是说英语的,因为它们具有 ESPNFC 和 brfootball 等帐户。

现在我们可以更好地理解为什么这些用户在社会学方面包括不同的社区,而不仅仅是图计算:他们说不同的语言! 他们都在发关于梅西和他的新团队的推文,但说西班牙语的人与其他说西班牙语的人互动比与说葡萄牙语或英语的人互动更多,这是有道理的。 此外,我们也可以理解,尽管灰色和橙色社区说西班牙语,但他们是从不同的角度这样做的。 灰色社区使用一种更幽默的方法来解释为什么他们彼此之间的互动比与官方足球或记者账户的互动更多。

释放 R 和 Gephi 的潜力

如果我们不使用 Gephi 绘制图形,我们可以使用 R 的 Ggplot 库。 但是,从我的角度来看,该库在网络图形方面的限制要大得多。 它不像 Gephi 那样是动态的,配置起来比较困难,产生的显示也不太清晰。

在本系列的其余部分中,我们将进一步分析这一点。 我们将执行一些主题建模文本分析,以查看用户正在谈论多少以及他们感兴趣的主题; 我们将进行情绪分析,看看它们是积极的还是消极的; 我们将进行更深入的图表分析,以分析 Twitter 的最大影响者。

您可以使用这些步骤来分析新的 Twitter 讨论,并查看您可以从图表中获得哪些见解。