OIerDb-ng / OIer

A database for OIers
GNU General Public License v3.0
592 stars 60 forks source link
noi oier py-csv

OIerDb

OIerDb is a database for Chinese OI participants.

OIerDb 是中国信息学竞赛选手的一个数据库.

A next generation OIerDb is now available at OIerDb-ng/OIerDb.

新版 OIerDb 现已推出,请前往 OIerDb-ng/OIerDb 查看。

如何订正数据

请点我了解数据修复

The following data are the unlicensed data gathered and formatted by fjzzq2002 from noi.cn. These data are modified and completed.

The rest of the data are directly from noi.cn, including:

这些数据是在开源项目中,由fjzzq2002整理的,并进行了部分完善

其余数据来源于NOI官网,包括

将来会及时更新新数据,也可能会添加缺失数据。

捐赠记录

日期 金额 备注
2019-03-07 20.00元 杭心语 北京大学
2019-03-09 20.00元
2019-03-10 10.00元
2019-03-14 6.66元
2019-03-15 10.00元 小伙子加油啊
2019-03-16 5.00元 Level -1
2019-03-18 10.00元
2019-03-18 6.00元
2019-03-18 9.99元 白雪粉粉何所似
2019-03-21 30.00元
2019-03-22 10.00元 捐赠给OIerDb,并Orz
2019-03-23 17.00元
2019-03-24 10.00元 资瓷oierdb!
2019-03-24 100.00元 oierdb捐助
2019-03-25 6.00元 备注能留的也太少了⑧
2019-03-25 5.00元
2019-03-28 10.00元
2019-03-29 30.00元 enor2017
2019-03-30 5.00元
2019-03-30 23.33元 Orz 无限仰慕作者
2019-04-02 15.00元
2019-04-02 200.00元 西安铁一中教练aqx
2019-07-25 10.00元
2019-07-30 10.00元
2019-07-31 3.50元 @imikeliu 捐
2019-08-02 20.00元 oierdb
2019-08-15 10.00元
2019-08-16 10.00元
2019-08-18 5.00元
2019-08-30 1000.00元 洛谷捐助
2019-09-06 50.00元 gbakkk5951
2019-09-25 2.33元
2019-09-25 2.33元 Github.com/panda2134
2019-09-26 10.00元
2019-10-01 0.10元
2019-10-12 5.00元
2019-10-28 20.00元
2019-11-01 8.00元
2019-11-10 20.00元 Andrew82
2019-11-13 10.00元 滋瓷之坤哥哥QwQ
2019-11-29 20.00元
2019-12-07 11.11元
2019-12-07 1.28元
2019-12-11 66.00元 发个红包,加油!
2019-12-14 10.00元
2019-12-21 10.00元
2019-12-21 1.00元
2019-12-23 10.24元
2019-12-23 20.20元 wzk2020出线冲冲冲!
2020-01-19 9.99元 卑微果壳
2020-01-30 5.00元
2020-02-16 1.00元
2020-12-02 10.00元 Fighting~~~
2020-12-02 5.00元
2020-12-10 100.00元 yloi
2020-12-16 10.00元
2021-01-25 1.00元 加油
2021-01-28 5.00元
2021-02-19 100.00元
2021-02-22 20.21元
2021-02-22 99.82元 来自蔡德仁的凝视
2021-02-22 100.00元 skyline
2021-02-24 10.22元 For OIer Amethyst
2021-02-25 200.00元
2021-02-25 1.00元
2021-03-06 2.00元
2021-03-14 5.00元 来自退役选手的感谢
2021-04-06 6.66元 才注意到能捐款
2021-04-10 10.00元
2021-04-13 9.99元 希望OIerDb能够长久
2021-05-10 50.00元 长沙
2021-05-23 100.00元
2021-06-01 10.00元
2021-06-03 200.00元 杨博洋 计蒜客
2021-06-07 15.00元 祝oierdb更好!
2021-06-16 200.00元
2021-06-28 33.00元 33DAI
2021-07-19 50.00元 a999999捐款50
2021-07-22 10.00元 OierBBS
2021-08-05 666.00元 左季初(压岁钱)捐款

搭建指南

这个项目是"OIerDb",但其实可以方便地改装成为任何一个学科竞赛获奖的数据库。项目由如下几部分组成:

合并及数据预处理

原始数据文件

data.txt

data.txt中是所有的获奖记录,实则为csv格式,每一行格式如下:

比赛名称,奖项,姓名,年级,学校,分数,省份,性别,

下面是一个例子

NOI2018,金牌,杨骏昭,高一,南京外国语学校,522,江苏,男,

需要注意的是,如果其中有一项缺省,逗号的数目不能减少,且每行最后还有一个逗号。

school_oped.txt

school_oped.txt中是表示学校合并信息的文件,同时记录有学校所属的省份。每一行格式如下:

省份,地市,学校名称1,学校名称2,(更多学校名称,结尾无逗号)

下面是一个例子

江苏,苏州市,江苏省苏州中学,江苏省苏州中学校,苏州中学

需要注意,每一个在data.txt中出现的学校名称都应当在这个文件中出现。 在getter.py中提供了一个基于百度地图api的从学校名称找定位的函数,通过这个函数可以初步地获得学校所在省份和地市,并合并一下定位相同的学校。这个效果并不充分,合并更多学校很大程度上基于人工判断,如果有人希望部署这个系统至其他位置,可参考本项目中school_oped.txt中做出的合并。

合并及数据处理脚本

两个脚本均是python3脚本,并需要pypinyin才能够正常运行。

new_merger.py

new_merger.py 是最重要的数据合并器。

new_merger.py 从 data.txtschool_oped.txt 读入数据,并输出csv格式到result.txt中。

school_analyzer.py

school_analyzer.py 是学校获奖记录统计及排名器。

new_merger.py 从 data.txtschool_oped.txt 读入数据,并输出csv格式到OI_school.txt中。

这个脚本将每个学校的获奖记录统计,并计算分数。分数由一个函数f(排名,比赛类型,比赛年份)得出

f(排名,比赛类型,比赛年份) = 0.8 ^ (今年年份-比赛年份) g(排名400/总参赛人数) * 比赛权重

g(x)在x = 0-60时为 100-40上的线性函数,x在60-250上为 36 - 7.5 上的线性函数,x在250-400上为7.5-0上的线性函数。

权重 = {"NOI":1,"NOID类":0.75,"CTSC":0.6,"WC":0.5,"APIO":0.4,"NOIP提高":0.1,"NOIP普及":0.04}

如果您有兴趣修改这个评分函数(或参数),请对比说明您的函数(或参数)的优越性。毕竟现在应用的也是一念之间的产物。

在线部署

作者的部署

作者的部署使用了MySQL,但实际上您使用什么数据库都可以(尽管这里只提供了php格式的查询MySQL数据库并返回的代码)。在更新/新添加数据时,先运行数据预处理的脚本,而后将生成的csv格式数据导入到数据库中,就结束了。

search.php 和 school.php

根据查询查表,而后返回 json 格式的数据。您需要更改php中的数据库信息以适应自己的设置。具体实现可能不是很漂亮。

欢迎您来作出贡献,提出意见和建议,或者自己搭一个玩玩。