# 项目清单列表
## 开源项目榜单
#### 开源项目榜单
* [x] [开源项目榜单](./ranks/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E6%A6%9C.csv)
* [x] [开源项目榜_国际项目](./ranks/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E6%A6%9C_%E5%9B%BD%E9%99%85%E9%A1%B9%E7%9B%AE.csv)
* [x] [开源项目榜_中国项目](./ranks/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E6%A6%9C_%E4%B8%AD%E5%9B%BD%E9%A1%B9%E7%9B%AE.csv)
* [x] [开源项目_用户组成](./ranks/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE_%E7%94%A8%E6%88%B7%E7%BB%84%E6%88%90.csv)
#### 开源项目-个人贡献榜
* [x] [个人向主要开源技术栈贡献榜单](./ranks/%E4%B8%AA%E4%BA%BA%E5%90%91%E4%B8%BB%E8%A6%81%E5%BC%80%E6%BA%90%E6%8A%80%E6%9C%AF%E6%A0%88%E8%B4%A1%E7%8C%AE%E6%A6%9C%E5%8D%95.csv)
* [x] [个人向国际主要开源技术栈贡献榜单](./ranks/%E4%B8%AA%E4%BA%BA%E5%90%91%E5%9B%BD%E9%99%85%E4%B8%BB%E8%A6%81%E5%BC%80%E6%BA%90%E6%8A%80%E6%9C%AF%E6%A0%88%E8%B4%A1%E7%8C%AE%E6%A6%9C%E5%8D%95.csv)
* [x] [个人向中国主要开源技术栈贡献榜单](./ranks/%E4%B8%AA%E4%BA%BA%E5%90%91%E4%B8%AD%E5%9B%BD%E4%B8%BB%E8%A6%81%E5%BC%80%E6%BA%90%E6%8A%80%E6%9C%AF%E6%A0%88%E8%B4%A1%E7%8C%AE%E6%A6%9C%E5%8D%95.csv)
#### 开源项目-公司贡献榜
* [x] [公司向主要开源技术栈贡献榜单](./ranks/%E5%85%AC%E5%8F%B8%E5%90%91%E4%B8%BB%E8%A6%81%E5%BC%80%E6%BA%90%E6%8A%80%E6%9C%AF%E6%A0%88%E8%B4%A1%E7%8C%AE%E6%A6%9C%E5%8D%95.csv)
* [x] [公司向国际主要开源技术栈贡献榜单](./ranks/%E5%85%AC%E5%8F%B8%E5%90%91%E5%9B%BD%E9%99%85%E4%B8%BB%E8%A6%81%E5%BC%80%E6%BA%90%E6%8A%80%E6%9C%AF%E6%A0%88%E8%B4%A1%E7%8C%AE%E6%A6%9C%E5%8D%95.csv)
* [x] [公司向中国主要开源技术栈贡献榜单](./ranks/%E5%85%AC%E5%8F%B8%E5%90%91%E4%B8%AD%E5%9B%BD%E4%B8%BB%E8%A6%81%E5%BC%80%E6%BA%90%E6%8A%80%E6%9C%AF%E6%A0%88%E8%B4%A1%E7%8C%AE%E6%A6%9C%E5%8D%95.csv)
## 项目目录结构说明
* `data/` 目录下是各种中间输入数据目录
* `ranks/` 目录下是榜单数据输出目录
* `src/` 是数据获取和榜单计算源代码目录,其中榜单计算代码是:`src/tasks/ranks.py`
## 项目配置和运行
1. python 3 环境
2. cd src/
3. `pip install -r requirements.txt`
4. `python main.py -a tasks.ranks`
## 数据源
1. **Apache 基金会项目** ,GitHub Apache 组织下的所有项目,通过 GitHub API 获取,每个 Json 文件含 100 个项目;
1. **CNCF 基金会项目**,GitHub CNCF 组织下的所有项目,通过 GitHub API 获取,每个 Json 文件含 100 个项目;
* 补充数据源:
1. **LinuxFoundation 项目**,
## 其它补充资料
1. **木兰Aarch64开源生态全景平台**,
1. **LF AI & DATA 基金会项目**,
1. **MySQL 项目**,待补充
1. **阿里大数据开源公示榜单**,
# 开源指数计算
## 计算方法1
计算方法 1 是通过对项目各个数据因子进行加权计算得出的一个排名结果,具体的计算规则可参考[src/tasks/ranks.py](src/tasks/ranks.py)
方法 1 的结算结果详见 `ranks` 目录中的数据
## 计算方法 2
1. 项目的受欢迎指数 P,指标包括:项目总 Star 数(S)、项目总 Fork 数(F)、项目总 Issue 数(I)
* P = S *0.5 + F* 0.3 + I * 0.2
2. 项目的活跃指数 A,指标包括:一段时间范围内(eg:1年)的项目主分支 Commit 数(c)、项目主分支新增 PR 数(p)、项目新增 Issue 数(i)、项目主分支贡献者 Contributor 数(d)
* A = A = c *0.4 + p* 0.2 + i *0.2 + d* 0.2
3. 项目的一段时间范围内的趋势,包括:
* 受欢迎指数变化趋势,以月为单位,最近 12个月项目的平均受欢迎指数的变化趋势 b(正的趋势>1 ,减弱的趋势 <1)
* 活跃指数变化趋势,以月为单位,最近 12个月项目的平均活跃指数变化趋势 d (正的趋势 >1 ,减弱的趋势 <1 )
4. 开源项目指数 = P *ATAN(b) + A* ATAN(d)
方法 2 的计算结果详见 [`data/csdn/gitcode_project_rank_top1000.csv`](data/csdn/gitcode_project_rank_top1000.csv)
# 贡献者排行
基于 `data/CSDN/repo-commit-rank.csv` 的数据和通过该邮箱 commit 找到的对应 GitHub 用户的公开地址、公司信息,提取出地域为中国(有省份信息的需要标记到省份),然后得到国内开发者的贡献排行榜
基于仓库的 commit 汇总数据 & `RepoType-OSChina.xlsx` 开源项目分类情况,找到不同项目的开发者排行,然后根据 GitHub 用户信息得到不同项目的开发者排行
## 数据介绍
> 补充说明:
>
> 1. 时间范围: 2020-10-1 至 2022-9-30
> 2. 趋势类的数据统计是以月为单位
### CSDN 数据
* `data/CSDN/CSDN 指数.xlsx` : 开源项目关键词在 CSDN 内容社区的指数变化趋势,以月为单位;该数据主要用于计算项目排行榜
* `data/CSDN/repo-commit-rank.csv` :开源项目的提交排行榜(按邮箱);该数据用于爬虫抓取全部提交用户的 GitHub 用户信息
* `data/CSDN/repository_commit_events_20200930_analysis_new-demo.csv` : 全部 5000 + 开源项目的 commit 提交记录按项目/按邮箱的汇总表,完整数据会导入到数据仓库中;该数据用于计算 Top 项目的用户贡献排行(个人用户&公司用户)
* `data/CSDN/commit_analysis.csv` : 全部 5000 + 开源项目最近24个月 `2020-10-1 ~ 2022-09-30` 的基于全部 commit 历史记录 汇总的 author_email 提交次数记录
### PingCAP 数据
PingCAP 数据主要用于计算项目排行榜
* `data/PingCAP/项目活跃度变化.csv` :开源项目按月为单位统计的 push 次数、新增 PR 数、新增 Issue 数以及这 3类事件的除重用户数
* `data/PingCAP/项目受欢迎度变化.csv` :开源项目按月为单位统计的新增 Star 数和新增 Fork 数
* `data/PingCAP/近24个月的活跃数据总数.csv` : 开源项目近 24 个月的活跃指标数据总数,包括总的 push 次数、总的新增 PR 数、总的新增 Issue 数以及这 3类事件的除重用户数
### 项目列表
* `data/RepoType.xlsx` :开源项目列表
* `data/RepoType-OSChina.xlsx` :开源项目列表的国别分类数据;该数据用于辅助区分项目的类型,包括国际主流开源项目、国内发起的国际开源项目以及主要在国内活跃的开源项目
### GitHub 用户数据
* `data/GitHub/UserInfo.xlsx` : GitHub 用户信息;该数据用于通过 `UserInfo` 中的 `company` & `location` 字段来辅助判断用户的所属公司信息 以及 用户的地区信息(国外开发者 & 中国(含城市)的开发者)
## 数据处理流程

## 报告出品方
* CSDN
* GitCode
* PingCAP
* 北京大学软件与微电子学院 荆琦博士及其团队