作业1报告
作业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 里操作。具体位置是:
- 打开 http://127.0.0.1:7070
- 用 bolt://127.0.0.1:7687、用户名 admin、密码 73@TuGraph 登录
- 进入首页后,先到 图项目
- 点击 创建新图项目
- 选择 空白模板
- 填项目名称和描述,然后创建
- 创建完成后,在该图项目上点击 图构建
- 先做 模型定义,再点 下一步 进入 数据导入
- 在 数据导入 页面上传 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;

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

所有评论(0)