X-lab2017/open-wonderland

2、排行榜 负责人@tyn1998

will-ww opened this issue · 25 comments

排行榜方面,比较重要的工作是设计排行榜的结构,同样可以适当参考《2023 **开源发展蓝皮书》中的部分内容,包括去年的年报内容,进行设计。

初步计划内容:

  • 2.1 全球开源项目 OpenRank 排名(Top 30)
  • 2.2 **开源项目 OpenRank 排名(Top 30)
  • 2.3 全球企业 OpenRank 排名(Top 20)
  • 2.4 **企业 OpenRank 排名(Top 20)
  • 2.5 全球基金会 OpenRank 排名(Top 10)
  • 2.6 全球开发者 OpenRank 排名(Top 30)
  • 2.7 全球协作机器人 OpenRank 排名(Top 30)

今年的分析样式,可以考虑能够回馈到 OpenLeaderboard 的产品迭代中去;另一个我们想常态化输出的地方是开放原子的《开源态势洞察》~


2、OpenRank 排行榜

2.1 国家和地区 OpenRank 排行榜(Top 20)

2.2 全球基金会 OpenRank 排行榜(Top 20)

2.3 全球企业 OpenRank 排行榜(Top 20)

2.4 **企业 OpenRank 排行榜(Top 20)

2.5 全球开源仓库 OpenRank 排行榜(Top 20)

2.6 **开源项目 OpenRank 排行榜(Top 20)

2.7 全球开发者 OpenRank 排行榜(Top 20)

2.8 **开发者 OpenRank 排行榜(Top 30)

2.9 GitHub 协作机器人事件数量排行榜(Top 20)

建议这个排行榜去掉,放入机器人洞察部分,这样第 2 部分,就全部都是 OpenRank 排行榜了~

以“2.1 全球开源项目 OpenRank 排名”为例,需要考虑如下因素:

  • 今年以项目作为归口,这样需要把项目(至少排名靠前的这些项目)所包含的仓库都进行标注,具体可以参考这里
  • 今年新增了 Gitee 的数据,因此应该增加“托管平台”的字段
  • 以 OpenRank 字段作为排名主键,因此也适当展示其他的指标,用以找一些可以讲故事的话题,在去年的基础之上(实际上去年的字段应该精简)可以加上:发起方、许可证、技术领域、仓库个数、参与总人数、核心开发者人数、所属基金会(这些字段都是具有话题性的,例如高斯的木兰许可证、欧拉的万级别仓库、华为几个项目的 Gitee 托管平台、多个项目归属开放原子基金会等等)

排行榜的要义就是简洁明了,主打 OpenRank 指标的同时,也能够制造各种话题~

7个榜的字段设计想法如下,所有榜单都按OpenRank均值12月总和进行排名。如果有不合理的(数据没法获取的)字段,请 @will-ww @frank-zsy @bifenglin @birdflyi @PureNatural @xiaoya-yaya 指出~

2.1 全球开源仓库 OpenRank 排名(Top 30)

  • 序号、仓库名称、OpenRank、参与人数、许可证、托管平台、地区(国家级)

2.2 **开源项目 OpenRank 排名(Top 30)

  • 序号、项目名称、OpenRank、仓库个数、参与人数、托管平台、所属基金会

2.3 全球企业 OpenRank 排名(Top 20)

  • 序号、企业名称、OpenRank、仓库个数、参与人数、代表项目、地区(国家级)

2.4 **企业 OpenRank 排名(Top 20)

  • 序号、企业名称、OpenRank、仓库个数、参与人数、代表项目

2.5 全球基金会 OpenRank 排名(Top 10)

  • 序号、基金会名称、OpenRank、仓库个数、参与人数、代表项目

2.6 国家和地区 OpenRank 排名(Top 20)

  • 序号、国家/地区、OpenRank、仓库个数、参与人数

2.7 全球开发者 OpenRank 排名(Top 30)

  • 序号、开发者名称、OpenRank、代表项目、托管平台、地区(国家级)

2.8 **开发者 OpenRank 排名(Top 30)

  • 序号、开发者名称、OpenRank、代表项目、托管平台

2.9 全球协作机器人 OpenRank 排名(仅GitHub)(Top 30)

  • 序号、机器人名称、事件数量、服务仓库个数、代表仓库

一些字段说明:

  • OpenRank (格式为:总和 ↑增量,下同)
  • OpenRank增量指2023年12月和2022年12月两个月OpenRank的增量
  • 许可证指项目中仓库使用最多的前三个开源许可证简称
  • 托管平台指“GitHub”、“Gitee”、“GitHub & Gitee”(考虑到有跨平台项目的话)
  • 代表项目:1、指某个企业或组织过去一年OpenRank均值最高的项目或几个项目;2、指开发者最活跃的项目或几个项目
  • 代表仓库指机器人服务的仓库中OpenRank均值最高的那个

整体问题不大,有如下一些问题需要考虑:

  • OpenRank 的展示方式应该与 OpenLeaderboard 及往年年报逻辑一致,使用 2023 自然年全年 12 个月的 OpenRank 总值,而非均值。增量可为 2023 全年相较 2022 全年的 OpenRank 总值增量。
  • 全球开源项目 Top 30 有难度,**开源项目 Top 30 通过我整理的**企业项目标签是可以获取的,且最终结果出入不会很大,但全球项目目前缺乏标注数据,很难以项目级别进行统计。
  • 基金会目前达不到 10 个,即便后续增加后可能也无法达到 10 个基金会。
  • 由于协作机器人在计算全域 OpenRank 时会被剔除,因此协作机器人并没有全域 OpenRank 值,如果一定要计算的话,需要使用他们在不同仓库的贡献度加上仓库的全域 OpenRank 来计算获取,虽然也可以得到结果,但解释成本比较高。

@frank-zsy @will-ww

谢谢Frank建议,那么:

  1. OpenRank安装Frank说的逻辑展示总量和增量,不要展示峰值了
  2. 把“全球开源项目”这个榜改成“全球开源仓库”
  3. 移除“基金会”榜和“机器人”榜
  4. 是否要增补一个“国家”榜(开放原子大屏里有这个榜)?

大家觉得怎么样?

国家榜挺好的,而且如果有过去几年的动态洞察就更好了。机器人榜还是可以有的,就看怎么解释,或者就不解释了。

@frank-zsy 动态洞察可以参考 @TieWay59 的这个图:#341 (comment)

感觉把机器人替换成**开发者 OpenRank 榜也可以。如果是我的话,比起机器人,我可能对国内开发者的排名兴趣更大。

感觉把机器人替换成**开发者 OpenRank 榜也可以。如果是我的话,比起机器人,我可能对国内开发者的排名兴趣更大。

这个可以,**开源年报,展示**也应该;但可以时间技术允许,也展示机器人,可以先不用想着解释,跑出来看看(找 @bifenglin)~

另外,“基金会”榜,有多少基金会展示多少基金会,为啥要去掉,可以看看夏博士他们的结果~

尽快先出一份出来,有了直观的数据,就有灵感知道怎么调整和优化了~ @tyn1998

(Release early, release often (RERO) )

@will-ww 收到,又edit了 #343 (comment) ,7个榜增加2个变成9个~

我这边已经在搭架子了:

image

@frank-zsy Frank学长,我这边取好9个榜以及它们的字段的implementation name后,会更新到此issue中,之后你那边就可以计算导出数据了~

以下每个JSON都是一个数组,王老师上面约定了Top10~30,@frank-zsy 学长在给数据的时候可以都给到50个(除基金会外),我这里可以截取。

  • 1、global_repository.json
type GlobalRepository = {
  no: number; // 序号
  logo: string;
  name: string; // 仓库名称
  openrank: number;
  delta: number | '-';
  participant_count: number;
  license: string;
  platform: string;
  flag_code: string;
  country: string; // 国家或地区
}
image
  • 2、chinese_project.json
type ChineseProject = {
  no: number;
  logo: string;
  name: string; // 项目名称
  openrank: number;
  delta: number | '-';
  repo_count: number;
  participant_count: number;
  platform: string[];
  foundation: string;
}
image
  • 3、global_company.json
  type GlobalCompany = {
    no: number;
    logo: string;
    name: string; // 企业名称
    openrank: number;
    delta: number | '-';
    repo_count: number;
    participant_count: number;
    representatives: string[]; // 代表项目
    flag_code: string;
    country: string;
}
image
  • 4、chinese_company.json
  type ChineseCompany = {
    no: number;
    logo: string;
    name: string; // 企业名称
    openrank: number;
    delta: number | '-';
    repo_count: number;
    participant_count: number;
    representatives: string[];
}
image
  • 5、global_foundation.json
  type GlobalFoundation = {
    no: number;
    logo: string;
    name: string; // 基金会名称
    openrank: number;
    delta: number | '-';
    repo_count: number;
    participant_count: number;
    representatives: string[];
}
image
  • 6、country.json
  type Country = {
    no: number;
    flag_code: string;
    name: string; // 国家或地区名称
    openrank: number;
    delta: number | '-';
    participant_count: number;
}
image

也可以看看TOP50的国家排行榜:

image
  • 7、global_developer.json
  type GlobalDeveloper = {
    no: number;
    logo: string;
    name: string; // 开发者名称
    openrank: number;
    delta: number | '-';
    representatives: string[];
    platform: string;
    flag_code: string;
    country: string;
}
image
  • 8、chinese_developer.json
  type ChineseDeveloper = {
    no: number;
    logo: string;
    name: string; // 开发者名称
    openrank: number;
    delta: number | '-';
    representatives: string[];
    platform: string;
}
image
 type GlobalBot = {
  no: number;
  avatar_url: string;
  name: string; // 机器人名称
  events: number; // 事件数量
  delta: number | '-';
  serving_repo_count: number; // 服务仓库数
  representative: string; // 所服务仓库中的代表仓库
}
image

我尽可能输出一下,公司的 logo 和国家的国旗是专门为了开放原子大屏收集过一波的,如果要增加榜单长度,需要添加很多新的信息,这块的采集成本还是非常高的。

我尽可能输出一下,公司的 logo 和国家的国旗是专门为了开放原子大屏收集过一波的,如果要增加榜单长度,需要添加很多新的信息,这块的采集成本还是非常高的。

@frank-zsy 谢谢Frank,logo和国旗没有的可以先给'',到时候我组织大家帮忙补上~

实现过程中有比较多的问题,我一个一个说明吧:

global_repository.json:

type GlobalRepository = {
  no: number; // 序号
  logo: string;
  name: string; // 仓库名称
  openrank: number;
  delta: number | '-';
  participant_count: number;
  licenses: string[]; // 单一仓库也可能有多个许可证
  platforms[]: string; // 仓库可能同时存在多个平台上
  foundation: string;
  flag_code: string;
  country: string; // 国家或地区
}

这里面需要注意是的 license 和 platform 都不是数组,platform 的话仓库本身的含义就是某个平台上的某个仓库 ID 对应的仓库,所以不会出现一个仓库对应多个平台的情况。license 的话来自于 GitHub 日志数据,GitHub 对外提供的仓库 license 是其识别出来的该仓库的唯一 license,并不包含多个,也不会看其包含的依赖的许可证信息,如果一个仓库许可内容较复杂,会直接识别为 Other。

另外目前仓库所属国家的标注是不多的,Top 50 的话大概只有一半有国家标注,如果没有的话要看是否需要补充,补充的话需要加入到 OpenDigger 的标签数据中才能自动化生成。

数据地址: https://oss.x-lab.info/frank_zsy/global_repository.json

chinese_project.json

type ChineseProject = {
    no: number;
    logo: string;
    name: string; // 项目名称
    openrank: number;
    delta: number | '-';
    repo_count: number;
    participant_count: number;
    licenses: string[];
    platforms: string[];
    foundation: string;
}

这里面的话大部分可以支持,但 license 比较复杂,一个项目可以包含上万个仓库,而且 Gitee 平台上是没有 license 信息的,需要人工收集,不建议在这里放了。foundation 的话可以做,但需要 OpenDigger 做深度的修改,目前 OpenDigger 的标签层级信息是没有保存的,所有不存在基金会和项目级标签之间的层级关系。

Update: Label 层级关系已由这个 PR 实现。

数据地址: https://oss.x-lab.info/frank_zsy/chinese_project.json

关于 logo,由于国家的 flag_code 都使用的是 emoji 注入的,这部分直接放到 OpenDigger 的底层工具库中,上层可以随时调用,直接是一个 Map 对象,key 是国家名称,value 是对应的国旗,例如 🇨🇳,🇺🇸即可。

对于项目、企业等需要额外收集 logo 的,建议是单独放一个目录,和 labeled_data 的结构完全一致,例如 labeled_data/companies/alibaba 的 logo 就在 logos/compaines/alibaba.png 中,labeled_data/companies/huawei/openharmony 的 logo 就在 logos/companies/huawei/openharmony.png ,然后这个目录与 OSS 保持同步,则前端可以直接使用 OSS 中的图片来进行展示。

global_bot.json已完成,地址:https://oss.x-lab.info/2023report/global_bot.json
因为没有全域的openrank内容,已改为如下内容:

type GlobalBot = {
    no: number;
    avatar_url: string; //头像url
    name: string; // 机器人名称
    events: number; //时间数量
    delta: number | '-';
    serving_repo_count: number; // 服务仓库数
    representatives: string[]; // 所服务仓库中的代表仓库
}

@frank-zsy @bifenglin 感谢两位学长提供的数据,已根据两位的评论修改了接口 #343 (comment)

关于 logo,由于国家的 flag_code 都使用的是 emoji 注入的,这部分直接放到 OpenDigger 的底层工具库中,上层可以随时调用,直接是一个 Map 对象,key 是国家名称,value 是对应的国旗,例如 🇨🇳,🇺🇸即可。

对于项目、企业等需要额外收集 logo 的,建议是单独放一个目录,和 labeled_data 的结构完全一致,例如 labeled_data/companies/alibaba 的 logo 就在 logos/compaines/alibaba.png 中,labeled_data/companies/huawei/openharmony 的 logo 就在 logos/companies/huawei/openharmony.png ,然后这个目录与 OSS 保持同步,则前端可以直接使用 OSS 中的图片来进行展示。

关于logo,我的理解就是去OpenDigger提PR提交图片,我可以找学弟学妹一起完成~

global_bot.json已完成,地址:https://oss.x-lab.info/2023report/global_bot.json

@bifenglin 毕博,这个JSON数据格式有误,无法加载:

image image

是变成一个数组是吧?已经修改,还是原地址,内容如下:

image

国家排行榜其实是一个有歧义的榜单,直觉上应该是各国发起的开源项目的 OpenRank 总值,但事实上开放原子大屏**家排行榜是各国开发者的全域 OpenRank 总值,这里的开发者是指开发者 GitHub 账号自填信息中 location 在该国的。

因此国家排行榜也就没有代表作一说了。

@frank-zsy OK,我把这个字段去掉~

再更新一版,主要是好几个榜的Top30改成Top20,并且 @frank-zsy 学长优化了logo。

image

修复Gitee数据后,再更新一版:

image

记得同步到报告中去~ @tyn1998

然后 @frank-zsy 也再看看,还有哪些地方会受比较大的影响,可以直接指出来,大家同步更新~

2023 **开源年度报告》的已正式发布~🎉