Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Design] 确定网络内容 & 搜索框和属性面板的设计 #2

Open
tyn1998 opened this issue Jun 1, 2023 · 10 comments
Open

[Design] 确定网络内容 & 搜索框和属性面板的设计 #2

tyn1998 opened this issue Jun 1, 2023 · 10 comments
Assignees

Comments

@tyn1998
Copy link
Member

tyn1998 commented Jun 1, 2023

属性面板中的内容必须根据网络本身内容来确定,所以必须先确定网络内容(哪些节点,哪些边,节点和边有哪些属性)。请 @andyhuang18@wj23027 一起合作,使用Neo4j browser连接实验室部署的Neo4j数据库搞清楚里面的网络数据。然后再设计属性面板。

https://neo4j.x-lab.info/ 带有全域 Issue、PR 节点的协作网络图的 Neo4j 数据库已经全部导入了,节点数 7.6 亿,边数 18.3 亿。大家可以玩一下,用户名 neo4j,密码 ********(请联系我) 。由于 Neo4j 的社区版不具有用户管理体系,所以这个账号是有读写权限的,大家尽量只执行查询操作,不要进行数据修改的操作。

image

搜索框功能可以单独设计,没有前置条件。

设计工具如果没有别的偏好,请使用MasterGo并加入我创建的团队,邀请链接为:https://mastergo.com/files/invite-member/95721000990804?inviter=74321087968121

参考资料:

@wj23027
Copy link
Collaborator

wj23027 commented Jun 1, 2023

设计问题我们到这里讨论吧#1 (comment)

目前总结下来需要实现的功能大概是这些,欢迎补充~

  1. 展示所有仓库、开发者的关系(能不能实现利用节点大小、颜色深浅之类的样式表示节点和边的权重)
  2. 搜索或者筛选仓库、开发者,将网络图聚焦到相应节点上
  3. 选中节点、边展示相应统计数据
  4. 选中多个仓库,展示多个仓库的聚合数据。

所以我们可能需要设计4个属性面板:

  • 节点:开发者、仓库
  • 多个仓库聚合数据

@tyn1998
Copy link
Member Author

tyn1998 commented Jun 2, 2023

所以我们可能需要设计4个属性面板:

  • 节点:开发者、仓库
  • 多个仓库聚合数据

Hi @wj23027 我们有个大方向是一次只展示一个仓库对应的子图,所以应该不会涉及到多个仓库的聚合数据。单个仓库网络内容可以参考openrank_detail的demo:

image

这是一个包含仓库节点、开发者节点、issue节点和PR节点的网络。

@andyhuang18
Copy link
Collaborator

暂时就确定用这个网络吧,用Cypher查询得到。

@tyn1998
Copy link
Member Author

tyn1998 commented Jun 13, 2023

这是一个包含仓库节点、开发者节点、issue节点和PR节点的网络。

@wj23027 @andyhuang18,这个网络的cypher查询语句get了吗?有任何进展请在此issue评论 :)

@wj23027
Copy link
Collaborator

wj23027 commented Jun 19, 2023

参考十吾的设计,我认为可以呈现这些数据:

  • 全局信息(未选中元素)
    • 年龄分布
    • 区域分布
    • 语言分布
    • 项目公司分布
    • 热门仓库
  • 仓库(选中仓库节点)- 参考开源项目洞察大屏
    • star、fork数、参与人数
    • 活跃度、openRank趋势
    • Issue、PR趋势
    • 代码贡献行数趋势
  • 开发者(选中开发者节点)- 参考开发者洞察大屏
    • 总览数据:仓库数量、star数量、参与项目、参与issue数、pr数
    • openrank、活跃度趋势
    • 近期活跃仓库
    • 用户技能
    • 代码贡献趋势

欢迎补充~

@tyn1998
Copy link
Member Author

tyn1998 commented Jun 20, 2023

Hi @wj23027,正如我在前面评论里指出的“不会涉及到多个仓库的聚合数据”,“全局信息(未选中元素)”中的内容应该都不需要。

第一版只关心单个仓库内的开发者、issue、PR,如果可以不计成本对大多数项目的项目内OpenRank进行计算导出openrank_detail.json的话,其实光这一个功能就很有竞争力。基于openrank_detail.json的网络展示是我心目中理想的应用形态,但目前只有几十个仓库的openrank_detail.json被计算。此处cue一下 @will-ww @frank-zsy 看看有没有可能让更过项目的openrank_detail.json可以被计算导出?

现在没有达到理想状态的条件,那么只能设计常规的结点信息增强,也就是用可视化的图表呈现实验室已有的一些指标数据。在设计功能的时候,一定要先看看有没有对应的数据,没有的话就不要设计进去了 😆

issue和PR没有专门的指标,所以不用设计点击节点后展示信息。目前只要增强仓库和开发者这两类结点的信息就行。

我还是先建议用cypher把这个网络查出来,可能设计起来会更有方向~

@wj23027 @andyhuang18,这个网络的cypher查询语句get了吗?有任何进展请在此issue评论 :)

@frank-zsy
Copy link

frank-zsy commented Jun 20, 2023

第一版只关心单个仓库内的开发者、issue、PR,如果可以不计成本对大多数项目的项目内OpenRank进行计算导出openrank_detail.json的话,其实光这一个功能就很有竞争力。基于openrank_detail.json的网络展示是我心目中理想的应用形态,但目前只有几十个仓库的openrank_detail.json被计算。此处cue一下 @will-ww @frank-zsy 看看有没有可能让更过项目的openrank_detail.json可以被计算导出?

事实上我们确实可以对更多的仓库来做 OpenRank 并生成 detail 的数据用于进行可视化,但由于我们目前使用了一些非日志数据,如大量的 reaction 数据来进行价值微调,这会导致我们无法仅通过全域日志数据来生成网络,需要大量请求 Issue 和评论中的 reaction 数据,这个对 API token 的需求量是非常高的,顶级仓库一个仓库可能有数十万甚至百万次请求,之后的增量也是不小的。

如果要做大量仓库的项目内 OpenRank,可以考虑不做分配的仓库暂时不考虑 reaction 数据,这样是可行的。

就可视化层面而言,目前查到的网络如果聚合了行为边,和导出的 OpenRank detail 的网络也是完全一致的,可能只是节点大小无法精确确定。

我还是先建议用cypher把这个网络查出来,可能设计起来会更有方向~

查询一个单仓某月的协作网络的 Cypher 如下:

MATCH p=(:github_repo{name:"X-lab2017/open-digger"})-[:has_issue_change_request]->()<-[a]-(:github_actor) WHERE TYPE(a) IN ["open","comment","review","review_comment","close"] AND a.year=2023 AND a.month=4 RETURN p

上面这个 Cypher 会返回 OpenDigger 2023.4 的协作网络

@tyn1998
Copy link
Member Author

tyn1998 commented Jun 20, 2023

感谢 @frank-zsy 的cypher:

image

@pomelo-nwu peo 另外我好像感受到 antvis/G6VP#89 (comment) 说的问题了。如下图所示,除了仓库结点,另外结点的label都没显示出来,我试着换个属性作为结点文本,但是发现列表里没有对应的属性:

image

@pomelo-nwu
Copy link
Collaborator

@tyn1998 对,得找下还有其他什么方法,能获得全部的数据信息

@frank-zsy
Copy link

可以尝试 CALL apoc.meta.schema() 来获取元信息,这个方法会遍历查询当前的所有节点,并汇总相关元信息,包含了不同节点可用的字段。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants