一次运用 ChatGPT 给出数据抓取代码,凭借 NebulaGraph 图数据库与图算法猜测体坛赛事的测验。

作者:古思为

蹭 ChatGPT 热度

最近由于世界杯正在进行,我受到这篇 Cambridge Intelligence 的文章启示(在这篇文章中,作者只是运用有限的信息量和条件,凭借图算法的办法做出了合理的冠军猜测),想到能够试着用图数据库 NebulaGraph 玩玩冠军猜测,还能顺道科普一波图库技术和图算法。

本来想着几个小时撸出来一个方案,但很快被数据集的搜集工作劝退了,我是实在懒得去「FIFA 2022 的维基」抓取所需的数据,索性就搁浅、放了几天。

一同,另一个热潮是上周五 OpenAI 发布了 ChatGPT 服务,它能够完结各种语言编码。ChatGPT 可完结的杂乱使命设计包括:

  • 随时帮你完结一段指定需求的代码
  • 模仿恣意一个 prompt 界面:Shell、Python、Virtual Machine、乃至你发明的语言
  • 带入给定的人设,和你聊天
  • 写诗篇、rap、散文
  • 找出一段代码的 bug
  • 解说一段杂乱的正则表达式的意义

ChatGPT 的上下文联想力和了解力到了前所未有的程度,以至于一切接触它的人都在评论新的工作方式:怎么把握让机器帮助咱们完结特定使命。

所以,当我试过让 ChatGPT 帮我写杂乱的图数据库查询句子、解说杂乱图查询句子的意义、解说一大段 Bison 代码意义之后,我突然意识到:为什么不让 ChatGPT 帮我写好抓取数据的代码呢

抓取世界杯数据

我真试了下 ChatGPT,成果是:完全能够,并且好像真的很简单。

整个完结进程,基本上我像是一个代码考试的面试官,或是一个产品经理,提出我的需求,ChatGPT 给出具体的代码完结。我再试着运转代码,找到代码中不合理的地方,指出来并给出主张,ChatGPT 真的能了解我指出的点,并给出相应的批改,像是:

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

这一全进程我就不在这儿列出来了,不过我把生成的代码和整个评论的进程都分享在这儿,感兴趣的同学能够去看看。

终究生成的数据是一个 CSV 文件:

  • 代码生成的文件 world_cup_squads.csv
  • 手动修正、分开了生日和年纪的列 world_cup_squads_v0.csv

上面的数据集包括的信息有:球队、小组、编号、方位、球员名字、生日、年纪、参与世界比赛场次、进球数、执役沙龙。

Team,Group,No.,Pos.,Player,DOB,Age,Caps,Goals,Club
Ecuador,A,1,1GK,Hernn Galndez,(1987-03-30)30 March 1987,35,12,0,Aucas
Ecuador,A,2,2DF,Flix Torres,(1997-01-11)11 January 1997,25,17,2,Santos Laguna
Ecuador,A,3,2DF,Piero Hincapi,(2002-01-09)9 January 2002,20,21,1,Bayer Leverkusen
Ecuador,A,4,2DF,Robert Arboleda,(1991-10-22)22 October 1991,31,33,2,So Paulo
Ecuador,A,5,3MF,Jos Cifuentes,(1999-03-12)12 March 1999,23,11,0,Los Angeles FC

这是手动删除了 CSV 表头的数据集 world_cup_squads_no_headers.csv。

图办法猜测 2022 世界杯

图建模

本文用到了图数据库 NebulaGraph 和可视化图探究东西 NebulaGraph Explorer,你能够在阿里云免费请求半个月的试用,进口链接是 请求运用云端 NebulaGraph。

图建模(Graph Modeling)是把实在世界信息以”点–>边“的图形式去笼统与表示。

这儿,咱们把在公共范畴取得的信息映射成如下的点与边:

点:

  • player(球员)
  • team(球队)
  • group(小组)
  • club(沙龙)

边:

  • groupedin(球队归于哪一小组)
  • belongto(队员归于国家队)
  • serve(队员在沙龙执役)

而队员的年纪、参与世界场次(caps)、进球数(goals)则很天然作为 player 这一类点的特点。

下图是这个 schema 在 NebulaGraph Studio/Explorer(后边称 Studio/Explorer) 中的截图:

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

咱们点击右上角的保存后,便能创立一个新的图空间,将这个图建模使用到图空间里。

这儿能够参阅下 Explore 草图的文档:docs.nebula-graph.com.cn/3.3.0/nebul…

导入数据进 NebulaGraph

有了图建模,咱们能够把之前的 CSV 文件(无表头版本)上传到 Studio 或者 Explorer 里,通过点、选关联不同的列到点边中的 vid 和特点:

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

完结关联之后,点击导入,就能把整个图导入到 NebulaGraph。成功之后,咱们还得到了整个 csv --> Nebula Importer 的关联配置文件:nebula_importer_config_fifa.yml,你能够直接拖拽整个配置,不用自己去配置它了。

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

这儿能够参阅 Explorer 数据导入的文档:docs.nebula-graph.com.cn/3.3.0/nebul…

数据导入后,咱们能够在 schema 界面查看数据统计。能够看到,有 831 名球员参与了 2022 卡塔尔世界杯,他们执役在 295 个不同的沙龙:

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

这儿咱们用到了 Explorer 的 schema 创立的文档:docs.nebula-graph.com.cn/3.3.0/nebul…

探究数据

查询数据

下面,咱们试着把一切的数据展示出来看看。

首要,凭借 NebulaGraph Explorer,我用拖拽的方式画出了恣意类型的点(TAG)和恣意类型点(TAG)之间的边。这儿,咱们知道一切的点都包括在至少一个边里,所以不会漏掉任何孤立的点。

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

让 Explorer 它帮我生成查询的句子。这儿,它默认返回 100 条数据(LIMIT 100),咱们手动改大一些,将 LIMIT 后边的参数改到 10000,并让它在 Console 里履行。

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

初步调查数据

成果渲染出来是这姿态,能够看到成果天然而然地变成一簇簇的形式。

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

这些外围、形成的簇多是由不怎么知名的足球沙龙,和不怎么厉害的国家队的球员组成,由于通常这些沙龙只有一两个球员参与世界杯,并且他们还集中在一个国家队、地区,所以没有和许多其他球员、国家队产生衔接。

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

图算法辅佐剖析

在我点击了 Explorer 中的两个按钮之后(详细参阅后边的文档链接),在浏览器里,咱们能够看到整个图已经变成:

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

这儿能够参阅 Explorer 的图算法文档:docs.nebula-graph.com.cn/3.3.0/nebul…

其实,Explorer 这儿运用到了两个图算法来剖析这儿的洞察:

  1. 运用点的收支度,改变它们的显示大小突出重要程度
  2. 运用 Louvain 算法区分点的社区分割

能够看到赤色的大点是鼎鼎大名的巴塞罗那,而它的球员们也被赤色标记了。

猜测冠军算法

为了能充分运用图的魔法(与图上的隐含条件、信息),我的思路是挑选一种运用衔接进行节点重要程度剖析的图算法,找出具有更高重要性的点,对它们进行全局迭代、排序,从而取得前几名的国家队排名。

这些办法其实就体现了厉害的球员一同具有更大的社区、衔接度。一同,为了添加强队之间的区分度,我准备把进场率、进球数的信息也考虑进来。

终究,我的算法是:

  • 取出一切的 (球员)-执役->(沙龙) 的关系,过滤其间进球数过少、单场进球过少的球员(以平衡部分弱队的老球员带来的过大影响)
  • 从过滤后的球员中向外探究,取得国家队
  • 在以上的子图上运转 Betweenness Centrality 算法,计算节点重要度评分

算法进程

首要,咱们取出一切进球数超越 10,场均进球超越 0.2 的 (球员)-执役->(沙龙) 的子图:

MATCH ()-[e]->()
WITH e LIMIT 10000
WITH e AS e WHERE e.goals > 10 AND toFloat(e.goals)/e.caps > 0.2
RETURN e

为了便利,我把进球数和进场数也作为了 serve 边上的特点了。

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

然后,咱们全选图上的一切点,点击左边的东西栏,挑选出方向的 belongto 边,向外进行图拓展(遍历),一同挑选将拓展得到的新点标记为旗号的 icon:

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

现在,咱们取得了终究的子图,咱们运用东西栏里的浏览器内的图算法功能,履行 BNC(Betweenness Centrality)

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

最后,这个子图变成了这姿态:

ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队

猜测成果

终究,咱们根据 Betweenness Centrality 的值排序,能够得到终究的取胜球队应该是:巴西 !

其次是比利时、德国、英格兰、法国、阿根廷,让咱们等两个礼拜回来看看猜测成果是否精确吧 :D。

注:排序数据(其间还有非参赛球队的点)

Vertex Betweenness Centrality
Brazil 3499
Paris Saint-Germain 3073.3333333333300
Neymar 3000
Tottenham Hotspur 2740
Belgium 2587.833333333330
Richarlison 2541
Kevin De Bruyne 2184
Manchester City 2125
lkay Gndoan 2064
Germany 2046
Harry Kane (captain 1869
England 1864
France 1858.6666666666700
Argentina 1834.6666666666700
Bayern Munich 1567
Kylian Mbapp 1535.3333333333300
Lionel Messi (captain 1535.3333333333300
Gabriel Jesus 1344

原文地址:discuss.nebula-graph.com.cn/t/topic/115…


谢谢你读完本文 (///▽///)

如果你想尝鲜图数据库 NebulaGraph,记住去 GitHub 下载、运用、(^^)-☆ star 它 -> GitHub;和其他的 NebulaGraph 用户一同交流图数据库技术和使用技术,留下「你的手刺」一同玩耍呀~