X-lab2017 / open-wonderland

X-lab 开放实验室的开源奇妙世界
60 stars 11 forks source link

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

Closed will-ww closed 9 months ago

will-ww commented 11 months ago

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

初步计划内容:

今年的分析样式,可以考虑能够回馈到 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 commented 11 months ago

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

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

tyn1998 commented 10 months ago

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

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 20)

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

2.8 中国开发者 OpenRank 排名(Top 30)

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

一些字段说明:

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

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

tyn1998 commented 10 months ago

@frank-zsy @will-ww

谢谢Frank建议,那么:

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

大家觉得怎么样?

frank-zsy commented 10 months ago

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

tyn1998 commented 10 months ago

@frank-zsy 动态洞察可以参考 @TieWay59 的这个图:https://github.com/X-lab2017/open-wonderland/issues/341#issuecomment-1872569693

tyn1998 commented 10 months ago

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

will-ww commented 10 months ago

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

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

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

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

(Release early, release often (RERO) )

tyn1998 commented 10 months ago

@will-ww 收到,又edit了 https://github.com/X-lab2017/open-wonderland/issues/343#issuecomment-1880066482 ,7个榜增加2个变成9个~

我这边已经在搭架子了:

image

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

tyn1998 commented 10 months ago

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

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
type ChineseProject = {
  no: number;
  logo: string;
  name: string; // 项目名称
  openrank: number;
  delta: number | '-';
  repo_count: number;
  participant_count: number;
  platform: string[];
  foundation: string;
}
image
  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
  type ChineseCompany = {
    no: number;
    logo: string;
    name: string; // 企业名称
    openrank: number;
    delta: number | '-';
    repo_count: number;
    participant_count: number;
    representatives: string[];
}
image
  type GlobalFoundation = {
    no: number;
    logo: string;
    name: string; // 基金会名称
    openrank: number;
    delta: number | '-';
    repo_count: number;
    participant_count: number;
    representatives: string[];
}
image
  type Country = {
    no: number;
    flag_code: string;
    name: string; // 国家或地区名称
    openrank: number;
    delta: number | '-';
    participant_count: number;
}
image

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

image
  type GlobalDeveloper = {
    no: number;
    logo: string;
    name: string; // 开发者名称
    openrank: number;
    delta: number | '-';
    representatives: string[];
    platform: string;
    flag_code: string;
    country: string;
}
image
  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 commented 10 months ago

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

tyn1998 commented 10 months ago

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

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

frank-zsy commented 10 months ago

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

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 commented 10 months ago

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 commented 10 months ago

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:

https://oss.x-lab.info/frank_zsy/country.json

frank-zsy commented 10 months ago

关于 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 commented 10 months ago

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 commented 10 months ago

@frank-zsy @bifenglin 感谢两位学长提供的数据,已根据两位的评论修改了接口 https://github.com/X-lab2017/open-wonderland/issues/343#issuecomment-1881013318

关于 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 commented 10 months ago

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

image
frank-zsy commented 10 months ago

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

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

tyn1998 commented 10 months ago

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

tyn1998 commented 10 months ago

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

image
tyn1998 commented 10 months ago

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

image
will-ww commented 10 months ago

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

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

will-ww commented 9 months ago

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