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

2、排行榜 负责人@tyn1998 #343

Closed
Tracked by #341
will-ww opened this issue Jan 7, 2024 · 25 comments
Closed
Tracked by #341

2、排行榜 负责人@tyn1998 #343

will-ww opened this issue Jan 7, 2024 · 25 comments

Comments

@will-ww
Copy link
Contributor

will-ww commented Jan 7, 2024

排行榜方面,比较重要的工作是设计排行榜的结构,同样可以适当参考《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 排行榜了~

@will-ww
Copy link
Contributor Author

will-ww commented Jan 7, 2024

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

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

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 7, 2024

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均值最高的那个

@frank-zsy
Copy link

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

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 8, 2024

@frank-zsy @will-ww

谢谢Frank建议,那么:

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

大家觉得怎么样?

@frank-zsy
Copy link

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 8, 2024

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 8, 2024

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

@will-ww
Copy link
Contributor Author

will-ww commented Jan 8, 2024

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

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

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

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

(Release early, release often (RERO) )

@tyn1998
Copy link
Member

tyn1998 commented Jan 8, 2024

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

我这边已经在搭架子了:

image

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 8, 2024

以下每个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

@frank-zsy
Copy link

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 9, 2024

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

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

@frank-zsy
Copy link

frank-zsy commented Jan 9, 2024

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

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

@frank-zsy
Copy link

frank-zsy commented Jan 9, 2024

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

@frank-zsy
Copy link

关于 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 中的图片来进行展示。

@bifenglin
Copy link
Contributor

bifenglin commented Jan 9, 2024

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[]; // 所服务仓库中的代表仓库
}

@tyn1998
Copy link
Member

tyn1998 commented Jan 9, 2024

@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

@bifenglin
Copy link
Contributor

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

image

@frank-zsy
Copy link

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

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 10, 2024

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

@tyn1998
Copy link
Member

tyn1998 commented Jan 11, 2024

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

image

@tyn1998
Copy link
Member

tyn1998 commented Jan 31, 2024

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

image

@will-ww
Copy link
Contributor Author

will-ww commented Jan 31, 2024

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

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

@will-ww
Copy link
Contributor Author

will-ww commented Feb 9, 2024

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

@will-ww will-ww closed this as completed Feb 9, 2024
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

4 participants