社交网络分析的几种方法
研究内容
Python模块部分
数据收集与使用
在数据收集上,一方面使用老师已经给出的数据集进行数据处理,另一方面使用爬虫技术爬取微博和推特上相应的社交数据进行构造。
在爬虫方法的使用上,首先根据研究目标,明确需要收集目标社交平台的用户关系数据和用户生成内容数据,包括用户个人信息、发帖内容、转发和评论网络等。并确定收集时间范围和数量规模。然后使用Python等语言,编写针对目标平台的爬虫程序。包含账户登录、Cookie维持、解析页面DOM树、逐层抓取等模块,实现增量持续爬取。
数据预处理
主要是使用Numpy与Pandas进行收集数据的预处理部分,对于收集得到的数据集,难免会出现存在缺失的情况,如用户转发而不进行文本回复,用户信息不完整等,使用Pandas的DataFrame结构让我们很方便的进行数据清洗,处理缺失值,处理重复数据与错误格式。
其中我们认为若只进行转发而不进行文本回复的行为是对上一用户发言的认同,则使用上一用户的发言来填补只转发不回复的发言文本,对于信息不完整的情况下,根据信息的缺失程度和重要性,考虑使用
不同的办法,如均值众数代替,删除缺失值,插值算法等来处理缺失值。
数据标准格式
并且为了确保在数据集的统一性,首先需要把每个数据都处理成标准的格式,下面是python模块模型数据集的标准格式:
索引名称 | 索引解释 |
---|---|
user_id | 用户的id名称 |
userCreatetime | 用户账号创建时间 |
gender | 用户性别 |
followersCount | 用户的粉丝数 |
content | 用户的发文内容 |
pubtime | 用户发布的时间 |
source_user | 转发用户(上一级节点) |
root_user | 该话题的根节点用户 |
基于数据集建立社交网络
基于数据集中的转发关系构建社交网络,数据集中下一级用户转发上一级用户的发言或话题,然后逐层向外转发,构建关系图网络G(V,E)G(V,E)G(V,E),将转发关系作为连接节点之间的边结构,构建网络转发关系图,其中主要使用了python中的networkx库,构建关于微博话题的社交网络图结构。
数据集关键节点分析
为了提取出图结构中关键节点,在python模块中选择了下面三种算法进行关键节点的选取。下面是对各个方法的介绍:
-
度数中心性 (Degree Centrality):
- 算法原理: 节点的度数中心性是指节点的度数,即与该节点相连的边的数量。在有向图中,分为入度和出度,而在无向图中,度数即为连接的边的数量。度数中心性高的节点在网络中具有更多的直接连接。
- 数学公式:
对于无向图: CD(v)=度数(v)N−1C_D(v) = \frac{\text{度数}(v)}{N-1}CD(v)=N−1度数(v)
对于有向图,可以分为入度(CDIn(v)=In-Degree(v)N−1C_{D_{\text{In}}}(v) = \frac{\text{In-Degree}(v)}{N-1}CDIn(v)=N−1In-Degree(v))和出度(CDOut(v)=Out-Degree(v)N−1C_{D_{\text{Out}}}(v) = \frac{\text{Out-Degree}(v)}{N-1}CDOut(v)=N−1Out-Degree(v))。
其中,CD(v)C_D(v)CD(v) 是节点 vvv 的度数中心性, NNN 是节点总数。
-
k-壳值 (k-Shell Value):
- 算法原理: k-壳值表示一个节点所在的最大 k-壳的层次。一个k-壳是指节点及其邻居中度数至少为 k 的子图。节点所在的k-壳值越高,说明它在网络的核心位置。
- 数学公式:
计算k-壳值需要进行迭代,首先将度数小于 k 的节点删除,然后递归地计算每个节点所在的(k-1)-壳的值。迭代直到图为空。k-壳值即为 k 的值。该过程可以表示为: Shellk(v)=k\text{Shell}_k(v) = kShellk(v)=k 和 Shellk(v)=maxu∈N(v)Shellk−1(u)\text{Shell}_k(v) = \max_{u \in N(v)} \text{Shell}_{k-1}(u)Shellk(v)=maxu∈N(v)Shellk−1(u),其中,Shellk(v)\text{Shell}_k(v)Shellk(v) 是节点 vvv 的k-壳值, N(v)N(v)N(v) 是节点 vvv 的邻居。
-
介数中心性 (Betweenness Centrality):
- 算法原理: 介数中心性度量节点在网络中作为桥梁的程度,即节点位于网络中最短路径的多少个中。介数中心性高的节点通常是连接不同社群或部分的关键节点。
- 数学公式:
介数中心性 CB(v)C_B(v)CB(v) 可以通过计算节点 vvv 作为最短路径中的桥梁的数量来得到: CB(v)=∑s≠v≠tσst(v)σstC_B(v) = \sum_{s \neq v \neq t} \frac{\sigma_{st}(v)}{\sigma_{st}}CB(v)=∑s=v=tσstσst(v),其中,σst\sigma_{st}σst 是从节点 sss 到节点 ttt 的最短路径数量,σst(v)\sigma_{st}(v)σst(v) 是通过节点 vvv 的最短路径数量。
通过以上三个方法,即可得到整个社交网络中比较重要的节点以及在整个社交网络中所处的地位,代表的观点和起到的推动作用。
相似性计算
下面计算其他节点与图结构中关键节点的相似性,相似性指标我们主要选取了下面三个方面:
-
发文相似性
-
转发相似性
-
时间相似性
下面我将给出对应不同的相似性指标,我们是如何进行处理得到的:
发文相似性
发文相似性首先需要介绍jieba库和TF-IDF度量
-
jieba库介绍:
- 库简介: jieba 是一款中文分词工具,广泛用于文本处理任务。
- 使用方法: 在Python中,你可以使用
$jieba$
库对文本进行中文分词,将文本切分成词语。
-
TF-IDF度量介绍:
- 概念: TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索与文本挖掘的常用加权技术。它考量了一个词在文档中的重要性,通过词频和逆文档频率的乘积来衡量。
- 数学公式:
TF(t,d)=词汇项 t 在文档 d 中的出现次数文档 d 中的总词数 \text{TF}(t, d) = \frac{\text{词汇项 } t \text{ 在文档 } d \text{ 中的出现次数}}{\text{文档 } d \text{ 中的总词数}} TF(t,d)=文档 d 中的总词数词汇项 t 在文档 d 中的出现次数
IDF(t,D)=log(语料库 D 的文档总数包含词汇项 t 的文档数+1) \text{IDF}(t, D) = \log\left(\frac{\text{语料库 } D \text{ 的文档总数}}{\text{包含词汇项 } t \text{ 的文档数} + 1}\right) IDF(t,D)=log(包含词汇项 t 的文档数+1语料库 D 的文档总数)
TF-IDF(t,d,D)=TF(t,d)×IDF(t,D) \text{TF-IDF}(t, d, D) = \text{TF}(t, d) \times \text{IDF}(t, D) TF-IDF(t,d,D)=TF(t,d)×IDF(t,D) - 其中,TF(t,d)\text{TF}(t, d)TF(t,d) 是词汇项 ttt 在文档 ddd 中的词频,IDF(t,D)\text{IDF}(t, D)IDF(t,D) 是逆文档频率,TF-IDF(t,d,D)\text{TF-IDF}(t, d, D)TF-IDF(t,d,D) 是综合考虑了词频和逆文档频率的度量。
下面我们将利用上面两项作为基础,进行文本相似性的计算,具体过程如下:
首先是构建词袋模型,利用我们先前得到关键节点的发文,提取其中包含话题主题等的词语构建词汇表,每个单词在词汇表中都有一个唯一的索引。然后以此作为基础,再将进行相似性计算的两文本构建为文档向量,其中每个元素对应于词汇表中的一个单词,再使用使用余弦相似度度量来比较两个文档的相似性。
同样,TF-IDF也是一种常见的使用文本向量来计算相似度的方法,与jieba词袋模型的方法较为相似,这种方法的缺点是只考虑了词语出现的频率,没有考虑其具体的语境。
为了弥补这一缺点,我们也采用的通过sentence_transformer的方法计算语义的相似性,
上图是sentence_transformer的使用场景图,这个模型中内置了很多能够计算语义相似性的办法,只需要使用encode函数将句子嵌入,再调用util中的cos_sim方法即可计算两个句子的语义相似性,准确度比较上述方法有了显著提高。
使用这种办法计算各级节点连接之间的文本相似性,作为图结构中边的权重之一。
转发相似性
转发相似性,主要考虑的是在用户转发的话题中共同@,转发和转发的数量规模,在我们已经进行的实验中,我们主要采用了下面的方法开展这一部分的研究:
1. @内容与##主题内容提取
- @内容提取:我们遍历转发文本,提取出@符号后的内容,即用户在转发中提到的其他用户,以建立用户之间的关联。
- ##主题内容提取:同样地,我们识别并提取出##符号中的主题内容,以理解转发涉及的具体话题。
2. 相似度标记
- 我们单独标记了具体共同的@回复和##主题的发言节点的相似度。这标明这两个节点针对同一个主题提出了观点,揭示了用户间在特定话题下的关联性和互动。
3. 主题建模
- 我们采用先进的自然语言处理技术,如主题模型(Topic Modeling),进行主题建模。这帮助我们挖掘转发文本中的隐藏主题结构,识别用户对不同话题的关注和讨论。
通过这些方法,我们旨在全面了解用户在转发中的互动模式,特别关注共同@、转发和转发规模,以及这些行为与特定主题的关联。这有助于揭示社交网络中的信息传播机制和用户间的相似性,为更深入的社交网络分析提供有力支持。
时间相似性
在我们的研究中,我们不仅关注了转发相似性,还着重考虑了时间相似性,其中包括短时间内集中发文和转发时间接近度等方面。
1. 短时间内集中发文
- 我们通过分析用户的发文模式,特别关注短时间内是否存在集中的发文行为。这包括监测用户在一段时间内发布的微博数量,并观察是否有明显的高峰期。这种方法可以帮助我们识别用户在特定时间段内是否更加活跃,以及是否存在集中关注某一主题的趋势。
2. 转发时间接近度
- 我们研究了用户之间在转发行为上的时间接近度。通过分析转发的时间戳,我们计算了用户之间转发行为的时间间隔,以揭示用户在相似时间内对特定内容的共同关注。这有助于理解用户在社交网络上对于特定信息的集中转发行为,进而推断可能存在的共同兴趣点。
主要的实现方法
时间分析工具
- 我们采用了时间分析工具,通过对微博数据进行时间戳的处理和解析,实现了对用户发文和转发的时间分布的可视化。这种工具帮助我们快速识别用户的活跃时段和转发集中期。
时间序列分析
- 运用时间序列分析方法,我们建立了用户发文和转发的时间序列模型,以便更深入地了解用户在不同时间段内的行为模式。这有助于识别转发活动的高峰期和用户在不同时刻的行为变化趋势。
通过这些时间相似性的研究方法,我们得以更全面地理解用户在社交网络上的活动模式,同时考虑了短时间内的行为集中和转发时间的接近度,为社交网络分析提供了更加多维度的视角。
将上述三种相似性的计算权重值进行归一化之后,作为图结构边的权重值,使得原本的无权图变为有权图,进而满足社区划分的基本条件。
louvain算法进行社区划分
Louvain 算法是一个用于社区发现的算法,特别适用于大规模网络。它基于模块度优化,通过迭代过程高效地识别网络中的社区结构。本节将详细介绍Louvain算法的原理和它在社交网络中的应用。
模块度 (Modularity)原理
-
定义:模块度是衡量网络划分质量的指标,用于评估网络中社区内的边密集程度相对于随机情况的增量。模块度高意味着网络中的社区结构非常明显。
-
计算公式:模块度 QQQ 可以用以下公式计算:
Q=12m∑ij[Aij−kikj2m]δ(ci,cj) Q = \frac{1}{2m} \sum_{ij} \left[ A_{ij} - \frac{k_i k_j}{2m} \right] \delta(c_i, c_j) Q=2m1ij∑[Aij−2mkikj]δ(ci,cj)
其中,AijA_{ij}Aij 表示节点 iii 和节点 jjj 之间边的权重,kik_iki 和 kjk_jkj 分别是节点 iii 和 jjj 的度数,mmm 是网络中所有边权重的总和,δ(ci,cj)\delta(c_i, c_j)δ(ci,cj) 是一个指示函数,当节点 iii 和 jjj 属于同一社区时值为1,否则为0。
应用 Louvain 算法
- 初始化:将每个用户(节点)初始化为一个独立的社区。
- 局部优化:通过局部优化模块度来迭代地将用户归入最优社区。
- 社群聚合:将已识别的社区合并为新的节点,构建一个新的简化网络。
- 重复优化和聚合:在简化网络上重复优化和聚合步骤,直至模块度不再增加。
分析和解释结果
- 对识别出的社区进行分析,理解每个社区的特征和共同点。
- 探究社区内外的互动模式,识别关键用户和关键连接。
考虑因素
- 分辨率限制:Louvain 算法可能受到分辨率限制的影响,即在极大规模的网络中可能难以识别较小的社区。适当调整算法参数可能有助于解决这一问题。
- 数据质量:输入数据的质量直接影响社区划分的结果。确保数据的准确性和完整性是获取有意义结果的前提。
- 结果解释:社区划分结果需要结合社交网络的具体背景进行解释,以确保发现的社区具有实际意义。
结论
通过结合 Louvain 算法,我们可以有效地执行社交网络的社区划分任务,揭示隐藏在庞大数据背后的社区结构。这不仅增强了我们对社交网络动态的理解,而且为进一步的社交网络分析和研究提供了坚实的基础。
研究价值
本次研究通过集成多种数据科学技术对社交网络的社区划分进行深入分析,揭示了社交网络结构和动态的重要特征。以下是本研究的几个关键研究价值:
社交网络行为理解
通过对社交网络数据的收集和分析,本研究深化了对用户行为模式的理解,尤其是在信息传播、用户互动和社区形成方面。这种理解对于设计更有效的信息推送策略、增强用户参与度以及提升社交平台的内容相关性具有重要价值。
关键节点与社区结构发现
利用度数中心性、k-壳值、介数中心性等算法识别关键节点,结合Louvain算法的社区划分,本研究有效揭示了社交网络中的核心用户和社区结构。这对于理解社交网络的影响力分布、信息流动路径和社区影响力等具有重要意义。
信息传播机制的洞察
通过分析转发相似性和时间相似性,本研究提供了对社交网络中信息传播机制的新洞察。这些洞察有助于预测信息传播趋势,为舆情监控、危机管理和营销策略提供支持。
数据处理与分析方法的创新
本研究在数据预处理、相似性计算和社区划分方面采用了一系列创新方法,如解决社交网络数据缺失问题的策略、基于内容和时间的相似性计算方法等。这些方法的开发和应用不仅提高了社交网络分析的准确性,也为未来相关研究提供了新的工具和思路。
社交网络优化与设计建议
基于本研究的发现,可以为社交网络的设计和优化提供科学依据和建议。例如,通过理解用户行为和社区结构,社交平台可以更好地设计算法推荐系统,促进健康的社区生态构建,以及增强用户体验。
总结
总体而言,本次研究的重要价值在于对社交网络深层次结构和动态的理解,以及为社交网络分析提供的新方法和技术。这些成果不仅丰富了社交网络研究领域的理论和实践,也为社交平台的优化和发展提供了宝贵的参考。
化与设计建议
基于本研究的发现,可以为社交网络的设计和优化提供科学依据和建议。例如,通过理解用户行为和社区结构,社交平台可以更好地设计算法推荐系统,促进健康的社区生态构建,以及增强用户体验。
总结
总体而言,本次研究的重要价值在于对社交网络深层次结构和动态的理解,以及为社交网络分析提供的新方法和技术。这些成果不仅丰富了社交网络研究领域的理论和实践,也为社交平台的优化和发展提供了宝贵的参考。