实验2:基于TuGraph的Epinions电商信任网络图查询与图算法分析
实验2:基于TuGraph的Epinions电商信任网络图查询与图算法分析
一、实验目的
- 掌握TuGraph图数据库建模、CSV数据导入流程,理解有向属性图概念;
- 熟练使用Cypher完成图基础查询、过滤、聚合、路径查找、增删改操作;
- 掌握经典图算法:PageRank影响力计算、LPA标签传播社区发现、Node2Vec节点嵌入(必做);
- 基于电商用户信任网络,完成用户影响力挖掘、社群划分、节点表征学习,分析网络拓扑特征。
二、数据集介绍
数据集名称:soc‑Epinions1电商社区用户信任网络数据集
- 数据来源:斯坦福大学SNAP公开数据集,https://snap.stanford.edu/data/soc‑Epinions1.html
- 业务功能:消费点评网站Epinions的有向用户信任网络,记录用户之间信任投票。可以用于社区发现、用户影响力分析、节点表征学习、链接预测等任务。
- 图结构:有向图
- 节点:代表平台用户,总共有75879个;
- 有向边
A→B:代表用户A信任用户B,总共508837条信任边; - 边没有附加属性。
- 网络特征:属于典型社交长尾网络,少数高影响力枢纽用户,大部分用户度数很低。
三、图模型设计与数据导入
创建图项目,图名称
epinions_trust;
3.1 属性图Schema建模
| 类型 | 标签 | 属性 | 说明 |
|---|---|---|---|
| 顶点 | User | uid(INT64,主键) | Epinions平台用户,uid为用户唯一编号 |
| 边 | TRUST | 无属性 | 有向边,User A -> User B,A信任B |
在图构建页面定义点
User、有向边TRUST;
3.2 数据预处理
原始下载文件为soc‑Epinions1.txt,文件开头存在#注释行,原始为空格分隔。
使用Python脚本做两件处理:
- 去除注释,生成边文件
epinions_edge.csv,表头source_id,target_id; - 提取全部不重复用户ID,生成节点文件
epinions_node.csv,表头uid。
importcsv edges=[]uids=set()withopen("soc-Epinions1.txt","r",encoding="utf-8")asf:forlineinf:line=line.strip()ifnotlineorline.startswith("#"):continues,t=line.split()s=int(s)t=int(t)edges.append([s,t])uids.add(s)uids.add(t)#输出边csvwithopen("epinions_edge.csv","w",newline="",encoding="utf-8")asf:wr=csv.writer(f)wr.writerow(["source_id","target_id"])wr.writerows(edges)#输出节点csvwithopen("epinions_node.csv","w",newline="",encoding="utf-8")asf:wr=csv.writer(f)wr.writerow(["uid"])foruidinsorted(uids):wr.writerow([uid])print(f"边数量:{len(edges)}")print(f"节点数量:{len(uids)}")Python 预处理代码运行
3.3 TuGraph 网页端导入数据
先导入节点文件epinions_node.csv,映射 uid 主键;
再导入边文件epinions_edge.csv,source_id映射源顶点,target_id映射目标顶点;
节点导入
边导入
3.4 导入校验 Cypher
MATCH (u:User) RETURN count(u) AS user_total; MATCH ()-[r:TRUST]->() RETURN count(r) AS edge_total;执行结果:
- 用户节点:75879
- 信任边:508837
计数校验查询结果
四、Cypher 图查询实验
4.1 基础浏览查询
查看 25 个用户节点:
MATCH (n:User) RETURN n LIMIT 25查看 25 组信任关系:
MATCH (n:User)-[r:TRUST]->(m:User) RETURN n,r,m LIMIT 254.2 属性过滤,查询指定用户
查询 uid=18 的用户:
MATCH(n:User) WHERE n.uid =18 RETURN n按 uid 精确查询结果
4.3 入度统计:被信任最多 Top10 用户(意见领袖)
MATCH (u:User)<-[r:TRUST]-() RETURN u.uid AS user, count(r) AS trusted_by ORDER BY trusted_by DESC LIMIT 10表格如下:
| 排名 | uid | trusted_by |
|---|---|---|
| 1 | 18 | 3035 |
| 2 | 143 | 1521 |
| 3 | 737 | 1317 |
| 4 | 790 | 1284 |
| 5 | 136 | 1180 |
| 6 | 1179 | 1166 |
| 7 | 1719 | 1140 |
| 8 | 118 | 1004 |
| 9 | 4416 | 941 |
| 10 | 780 | 908 |
结果解读
uid=18 被 3035 个用户信任,是全网络被信任最多的用户。网络平均入度约 6.7,头部用户被信任数量远高于均值,网络呈现典型长尾分布。
入度 Top10 查询结果
4.4 出度统计:信任他人最多 Top10(活跃用户)
MATCH (u:User)-[r:TRUST]->() RETURN u.uid AS user, count(r) AS trusts ORDER BY trusts DESC LIMIT 10表格如下:
| 排名 | uid | trusts |
|---|---|---|
| 1 | 645 | 1801 |
| 2 | 763 | 1669 |
| 3 | 634 | 1621 |
| 4 | 71399 | 1128 |
| 5 | 3924 | 976 |
| 6 | 5232 | 952 |
| 7 | 44 | 843 |
| 8 | 637 | 834 |
| 9 | 1059 | 761 |
| 10 | 145 | 662 |
结果解读
信任别人最多的用户,和被别人信任最多的用户不是同一批人。活跃输出信任的用户 ≠ 社区权威意见领袖。
出度 Top10 查询结果
4.5 WITH 管道聚合,筛选高活跃用户
筛选出度大于 100 的用户:
MATCH (u:User)-[r:TRUST]->(v:User) WITH u, count(r) AS outDeg WHERE outDeg > 100 RETURN u.uid AS user, outDeg ORDER BY outDeg DESC LIMIT 10表格如下:
| 排名 | uid | outDeg |
|---|---|---|
| 1 | 645 | 1801 |
| 2 | 763 | 1669 |
| 3 | 634 | 1621 |
| 4 | 71399 | 1128 |
| 5 | 3924 | 976 |
| 6 | 5232 | 952 |
| 7 | 44 | 843 |
| 8 | 637 | 834 |
| 9 | 1059 | 761 |
| 10 | 145 | 662 |
WITH 聚合过滤结果
4.6 路径查找,两用户 3 跳以内信任路径
查找 uid=18 与 uid=645 之间最多 3 跳信任路径:
MATCH p=(a:User {uid:18})-[*..3]-(b:User {uid:645}) RETURN p LIMIT 5路径查询可视化
4.7 Cypher 增删改闭环测试
TuGraph 为强 Schema 图数据库,只能使用已经定义好的属性。
//新增测试节点 CREATE (n:User {uid: 999999}) RETURN n //新增测试信任边 MATCH (a:User {uid:999999}),(b:User {uid:18}) CREATE (a)-[r:TRUST]->(b) RETURN r //查询验证 MATCH (n:User {uid:999999})-[r]->(m) RETURN n,r,m //删除边和节点 MATCH (n:User {uid:999999})-[r]-() DELETE n,r MATCH (n:User {uid:999999}) DELETE n //校验总数不变 MATCH(n:User) RETURN count(n)增删改全套执行截图
五、图算法实验
本实验在 TuGraph 上传 Python 存储过程,分别运行 PageRank、LPA 标签传播、Node2Vec 节点嵌入。
5.1 PageRank 算法 —— 用户影响力分析
算法原理
PageRank 核心思想:一个节点的影响力,不仅看多少节点指向它,还要看指向它的节点自身的权重。
(PR(v)=\frac{1-d}{N}+d\sum_{u \rightarrow v}\frac{PR(u)}{outdeg(u)})
d 阻尼系数取 0.85。在信任网络中,PR 分数越高,代表该用户是网络意见领袖。
参数设置:max_iter=20,damping=0.85。
调用存储过程参数 JSON:
{"max_iter":20,"damping":0.85,"top_k":15}部分返回结果:
表格
| uid | PageRank 分数 |
|---|---|
| 18 | 0.004536 |
| 737 | 0.003151 |
| 118 | 0.002122 |
| 1716 | 0.002079 |
| 136 | 0.001987 |
| 790 | 0.001969 |
| 143 | 0.001957 |
| 40 | 0.001825 |
| 1616 | 0.001537 |
| 725 | 0.001496 |
| 849 | 0.001487 |
结果解读
uid=18 依旧排名第一,和入度统计结果互相印证。PageRank 相比单纯入度,额外考虑信任来源用户本身的影响力,可以更客观衡量用户真实社区地位。
PageRank 存储过程上传、运行返回结果
5.2 LPA 标签传播算法 —— 社区发现
算法原理
标签传播 LPA:每个节点初始拥有自己标签;迭代过程节点采纳邻居出现最多标签;连接紧密的节点收敛为同一个社区标签。适合大规模社交网络,不需要预先指定社区数量。
调用参数 JSON
{"max_iter":20}运行输出关键结果:
- 社区总数量:16563
- 最大社区成员:53159,占据全网大部分用户。
结果解读
信任网络呈现:一个超大主社群 + 大量微型小社群。大部分用户连通在一个大信任社群,剩下大量小规模圈子,对应小众小团体、孤立用户。可以用来挖掘社群,识别异常水军小团伙。
LPA 存储过程运行结果截图
5.3 Node2Vec 节点嵌入
算法原理
Node2Vec 使用有偏随机游走采样节点序列,再用 Skip‑gram 训练,把图中每一个节点映射为低维稠密向量。
- 参数
p返回概率,控制 BFS 局部搜索; - 参数
q进出概率,控制 DFS 全局搜索;
向量相近代表网络拓扑角色、社群相似,可以用于下游:相似用户推荐、链接预测、聚类分类。
调用 JSON 参数:
{ "p": 1.0, "q": 1.0, "walk_len": 10, "num_walks": 5, "max_starts": 20, "vector_size": 64, "epochs": 3, "learning_rate": 0.05, "neg_samples": 5, "window": 3 }输出每个用户 64 维向量样例:[-0.0170, -0.0213, 0.0245, 0.1388, 0.0827, -0.1016 ......]
结果解读
得到每个用户低维表征向量,向量距离近的用户,在信任网络结构位置接近。向量可以导出本地,计算余弦相似度,寻找结构相似用户,做信任链接预测。
Node2Vec 存储过程上传,运行返回向量结果
六、实验总结
本次实验基于 TuGraph 图数据库完成 Epinions 电商用户信任网络完整分析链路:
- 完成数据集预处理、属性图建模、CSV 批量导入,成功导入 75879 个用户节点,508837 条有向信任边;
- 使用 Cypher 完成基础查询、过滤、WITH 聚合、路径查询、增删改全部操作,熟悉 TuGraph 强 Schema 特性;
- 运行 3 套图算法:
- PageRank 识别网络高影响力意见领袖用户;
- LPA 标签传播挖掘信任网络社群结构,看到一大众多小社群网络特征;
- Node2Vec 节点嵌入生成用户 64 维向量,完成节点表征学习,为下游机器学习任务提供特征。
该信任网络是典型无标度长尾社交网络,少数枢纽用户主导信任传播,大量普通用户度数很低。