网易云音乐粉丝网络(爬虫+网络)

本文介绍了如何构建和可视化网易云音乐的粉丝网络。通过Python爬虫获取用户粉丝信息,形成adjacency Matrix,并使用Graphia软件进行网络绘制。最终,作者获取了13700多条数据并进行了有效处理,简化了矩阵计算,实现了网络的高效绘制。

NetEase Cloud Music Fans Network

以网易云用户为一个个节点,一旦一个用户A是另一个用户B的粉丝,则 [ A , B ] = 1 [A, B] = 1 [A,B]=1, 否则 [ A , B ] = 0 [A, B] = 0 [A,B]=0, 形成一个adjacency Matrix.最后将网络可视化。

fans network
在这里插入图片描述

主要包括两个部分:

  • 爬虫
  • 粉丝网络绘制
  • 资源文件

爬虫

使用python + selenium,对粉丝信息进行爬取

from selenium import webdriver
import math

browser = webdriver.Chrome()

browser.implicitly_wait(30)

根据用户ID进入用户粉丝列表,获取其粉丝ID


def fanInfor(fanID):
    URL = "https://music.163.com/#/user/fans?id=" + fanID
    browser.get(URL)
    #switch to iframe id="g_iframe"
    browser.switch_to.frame("g_iframe")
    name = browser.find_element_by_xpath("//*[@id='j-name-wrap']/span[1]").text
    degree = int(browser.find_element_by_id("fan_count_down").text)
    #one page max fan id = 20
    pages = math.ceil(degree 
### 社交网络中的推荐算法实现 社交网络中的推荐算法旨在通过挖掘用户的行为数据和社会关系来提供个性化的建议。这些算法利用了社交网络的特性,例如用户的兴趣爱好、信任关系以及紧密连接的群体结构[^1]。 #### 基于社会关系的推荐算法 基于社会关系的推荐算法主要依赖于用户之间的交互和联系强度。这种算法假设如果两个用户之间存在较强的社交关系,则他们的偏好可能相似。具体来说: - **协同过滤**:这是最常见的推荐方法之一,分为基于用户的协同过滤和基于物品的协同过滤。在社交网络环境中,可以进一步扩展为考虑社交关系权重的协同过滤模型。例如,在计算用户相似度时,不仅关注共同评分的历史记录,还可以加入好友关系作为额外特征。 - **图嵌入技术**:随着深度学习的发展,图神经网络(Graph Neural Networks, GNNs)被广泛应用于社交网络分析中。GNN能够捕捉复杂的拓扑结构并将其映射到低维空间表示,从而更好地理解节点间的关系。这种方法对于处理大规模稀疏矩阵非常有效,并且适用于冷启动问题场景下的个性化推荐任务[^2]。 #### 融合内容与上下文信息的方法 除了单纯依靠社交链接外,现代推荐系统还经常结合其他维度的信息源来进行更精准预测: - **混合型推荐引擎**: 将显式的反馈(如点赞/评论次数) 和隐式信号 (浏览时间长短等), 加上文本描述或者多媒体元数据一同输入给机器学习框架训练得到最终输出结果. - **情境感知推荐**: 这类方案特别适合移动互联网时代下动态变化频繁的应用场合比如地理位置服务(LBS). 它们会综合考量当前时刻的具体状况——包括但不限于天气情况、一天当中的时间段等因素影响人们决策过程的可能性. ```python import networkx as nx from sklearn.metrics.pairwise import cosine_similarity def calculate_social_influence(graph): """ 计算每个节点的社会影响力得分 参数: graph (nx.Graph): 表示社交网络的无向图 返回: dict: 键为节点ID,值为其对应的社会影响力分数 """ adjacency_matrix = nx.to_numpy_array(graph) similarity_scores = cosine_similarity(adjacency_matrix) influence_dict = {} for node_index in range(len(similarity_scores)): total_score = sum([score * weight for score, (_, weight) in zip( similarity_scores[node_index], list(graph.edges(node_index)))] ) influence_dict[list(graph.nodes())[node_index]] = total_score return influence_dict ``` 上述代码片段展示了一个简单的函数用于衡量社交网络里各个成员所具备的不同程度上的“号召力”。它先构建邻接矩阵再求余弦夹角距离进而得出两两对比之后的整体数值表现形式;最后遍历整个图表对象获取每条边关联双方相互作用产生的加权总分即代表该顶点在整个体系内的相对重要位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值