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建议,那么:
- OpenRank安装Frank说的逻辑展示总量和增量,不要展示峰值了
- 把“全球开源项目”这个榜改成“全球开源仓库”
- 移除“基金会”榜和“机器人”榜
- 是否要增补一个“国家”榜(开放原子大屏里有这个榜)?
大家觉得怎么样?
国家榜挺好的,而且如果有过去几年的动态洞察就更好了。机器人榜还是可以有的,就看怎么解释,或者就不解释了。
@frank-zsy 动态洞察可以参考 @TieWay59 的这个图:#341 (comment)
感觉把机器人替换成**开发者 OpenRank 榜也可以。如果是我的话,比起机器人,我可能对国内开发者的排名兴趣更大。
感觉把机器人替换成**开发者 OpenRank 榜也可以。如果是我的话,比起机器人,我可能对国内开发者的排名兴趣更大。
这个可以,**开源年报,展示**也应该;但可以时间技术允许,也展示机器人,可以先不用想着解释,跑出来看看(找 @bifenglin)~
另外,“基金会”榜,有多少基金会展示多少基金会,为啥要去掉,可以看看夏博士他们的结果~
尽快先出一份出来,有了直观的数据,就有灵感知道怎么调整和优化了~ @tyn1998
(Release early, release often (RERO) )
@will-ww 收到,又edit了 #343 (comment) ,7个榜增加2个变成9个~
我这边已经在搭架子了:
@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; // 国家或地区
}
- 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;
}
- 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;
}
- 4、chinese_company.json
type ChineseCompany = {
no: number;
logo: string;
name: string; // 企业名称
openrank: number;
delta: number | '-';
repo_count: number;
participant_count: number;
representatives: string[];
}
- 5、global_foundation.json
type GlobalFoundation = {
no: number;
logo: string;
name: string; // 基金会名称
openrank: number;
delta: number | '-';
repo_count: number;
participant_count: number;
representatives: string[];
}
- 6、country.json
type Country = {
no: number;
flag_code: string;
name: string; // 国家或地区名称
openrank: number;
delta: number | '-';
participant_count: number;
}
也可以看看TOP50的国家排行榜:
- 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;
}
- 8、chinese_developer.json
type ChineseDeveloper = {
no: number;
logo: string;
name: string; // 开发者名称
openrank: number;
delta: number | '-';
representatives: string[];
platform: string;
}
- 9、global_bot.json (此处 @bifenglin )
type GlobalBot = {
no: number;
avatar_url: string;
name: string; // 机器人名称
events: number; // 事件数量
delta: number | '-';
serving_repo_count: number; // 服务仓库数
representative: string; // 所服务仓库中的代表仓库
}
我尽可能输出一下,公司的 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 实现。
global_company.json:
https://oss.x-lab.info/frank_zsy/global_company.json
chinese_compnay.json:
https://oss.x-lab.info/frank_zsy/chinese_company.json
global_foundation.json:
https://oss.x-lab.info/frank_zsy/global_foundation.json
global_developer.json:
https://oss.x-lab.info/frank_zsy/global_developer.json
chinese_developer.json:
https://oss.x-lab.info/frank_zsy/chinese_developer.json
country.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数据格式有误,无法加载:
国家排行榜其实是一个有歧义的榜单,直觉上应该是各国发起的开源项目的 OpenRank 总值,但事实上开放原子大屏**家排行榜是各国开发者的全域 OpenRank 总值,这里的开发者是指开发者 GitHub 账号自填信息中 location 在该国的。
因此国家排行榜也就没有代表作一说了。
@frank-zsy OK,我把这个字段去掉~
再更新一版,主要是好几个榜的Top30改成Top20,并且 @frank-zsy 学长优化了logo。
然后 @frank-zsy 也再看看,还有哪些地方会受比较大的影响,可以直接指出来,大家同步更新~
《2023 **开源年度报告》的已正式发布~🎉