作业1报告

1. 实验背景

这次实验用的是 Elliptic Bitcoin Transaction Dataset数据集。这个数据集把比特币交易整理成了一张有方向的交易图,每个节点代表一笔交易,边代表交易之间的资金流向。数据集一共有 203,769 个节点、234,355 条边,已标注交易里大约有 4,545 条非法交易、42,019 条合法交易,其余是未标注交易。

TuGraph 是一个图数据库,适合保存这种点 + 边 + 属性的数据。相比普通关系型数据库,图数据库在查询多跳关系、邻居扩展、路径分析时会更方便,所以这次实验用 TuGraph 来完成数据建模和导入。

2. TuGraph 启动与登录

我本地先启动 TuGraph 服务,然后在浏览器里访问 TuGraph Browser。默认情况下,Browser 一般可以通过 http://127.0.0.1:7070 打开,登录账号是 admin,默认密码是 73@TuGraph。

登录成功后,页面会进入 TuGraph 的管理界面,登录成功界面如图所示:

3. 图建模与数据导入

这次作业我主要使用了两个文件(Kaggle 里的真实文件名是 elliptic_txs_classes.csv 和 elliptic_txs_edgelist.csv):

  • elliptic_txs_classes.csv
  • elliptic_txs_edgelist.csv

3.1 图模型设计

我把交易建模成一个简单的属性图:

类型

标签

说明

顶点

Transaction

每个节点代表一笔交易

顶点属性

txId, class

txId 作为主键,class 记录交易类别

TRANSFER

表示一笔交易到另一笔交易的资金流向

这里的 class 我用字符串保存,值一般是 1、2、unknown,分别对应非法、合法和未标注交易。

3.2图建模和数据导入

在 TuGraph Browser 里操作。具体位置是:

  1. 打开 http://127.0.0.1:7070
  2. 用 bolt://127.0.0.1:7687、用户名 admin、密码 73@TuGraph 登录
  3. 进入首页后,先到 图项目
  4. 点击 创建新图项目
  5. 选择 空白模板
  6. 填项目名称和描述,然后创建
  7. 创建完成后,在该图项目上点击 图构建
  8. 先做 模型定义,再点 下一步 进入 数据导入
  9. 在 数据导入 页面上传 CSV 文件,最后完成导入

3.3 导入配置

我写了一个 import_config.json,用来告诉 TuGraph 这两个 CSV 文件分别怎么映射到顶点和边。核心思路是:elliptic_txs_classes.csv 负责建点,elliptic_txs_edgelist.csv 负责建边。

导入完成后,TuGraph 里会出现我建好的 Transaction 图模型,数据导入成功后页面会显示成功状态;

3.4 我实际点的内容

在 模型定义 里,我先建了一个顶点类型 Transaction,主键是 txId,再建了一种边类型 TRANSFER,表示交易流向。

在 数据导入 里,我上传了两个文件:

  • elliptic_txs_classes.csv 对应 Transaction
  • elliptic_txs_edgelist.csv 对应 TRANSFER

上传后要做字段映射:

  • elliptic_txs_classes.csv 里把 txId 映射到主键,把 class 映射到属性
  • elliptic_txs_edgelist.csv 里把 txId1 映射为起点,把 txId2 映射为终点

映射检查无误后再点导入,这样图数据就能成功写进 TuGraph。

4. Cypher 示例

4.1 基础增删改查

新增一个测试节点:

CREATE (:Transaction {txId: 999999999, class: 'unknown'});

修改节点类别:

MATCH (n:Transaction {txId: 999999999})
SET n.class = '2'
RETURN n;

删除测试节点:

MATCH (n:Transaction {txId: 999999999})
DETACH DELETE n;

基础查询,统计交易节点总数:

MATCH (n:Transaction)
RETURN count(n) AS total_transactions;

4.2 复杂查询

我根据这个数据集设计了一个简单的复杂查询:查找非法交易及其两跳资金流路径。这样可以更直观看到可疑交易周围的关系网络。

MATCH p=(a:Transaction {class: '1'})-[:TRANSFER]->(b:Transaction)-[:TRANSFER]->(c:Transaction)
RETURN p
LIMIT 20;

如果想进一步看非法交易周围最常连接到哪些节点,也可以用下面这个查询:

MATCH (a:Transaction {class: '1'})-[:TRANSFER]->(b:Transaction)
RETURN b.txId, count(*) AS times
ORDER BY times DESC
LIMIT 10;

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐