← Home

国家自然科学基金数据分析

最近在做的一件事情需要查询各类项目,意外发现国家社科基金和国家自然科学基金这些项目数据都是公开的,于是就想弄下来分析一下。另外强烈吐槽 教育部人文社会科学研究规划基金,项目数据居然是不公开的!

获取数据

由于网站数据结构化程度很高,利用 R 语言的 XML 包中的 readHTMLTable 函数,只需很少的代码就可以得到整齐的数据。在获取数据的过程中,唯一需要的参数就是网页中的页面总数。

打开 国家自然科学基金数据库,查找总页数的方法就是把浏览器地址栏的最后一个参数调到足够大,比如调到 100000, http://www.nsfcms.org/index.php?r=search/index&Projects_page=100000,然后就看到最后一页是 1606 页。

library(XML)

# 查看网站上的总页数,2016-11-19 日时有 1606 页 Page <- 1606 URL <- as.vector(paste0("http://www.nsfcms.org/index.php?r=search/index&Projects_page=", 1:Page))

Natural <- data.frame() i <- 1 for (i in 1:Page){ D1 <- as.data.frame(readHTMLTable(URL[i])) Natural <- rbind(Natural, D1) print(i) i <- i + 1 }

names(Natural) <- c("项目批准号", "项目类别", "项目名称", "依托单位", "负责人", "金额", "起止年月","总评")

# 保存时最好以抓取日期命名 write.csv(Natural, "natural-2016-11-19.csv", row.names = F)

数据清洗

首先看自然科学基金的情况。在此之前需要清洗数据,主要是对起止年月进行拆分,并转换为日期。

library(readr)
library(stringr)
library(lubridate)
library(ggplot2)
library(ggthemes)
library(knitr)
library(dplyr)

Natural <- read_csv("natural-2016-11-19.csv")

# 对字符串进行拆分 Period <- str_split(Natural$起止年月,"-", simplify = T)

# R 无法处理没有日期的数据,因此加上日期 Begin <- paste0(Period[,1], ".01") Begin <- as.Date.character(Begin,"%Y.%m.%d") End <- paste0(Period[,2], ".01") End <- as.Date(End, "%Y.%m.%d") Interval <- round((End - Begin) / (365/12)) + 1 Natural <- cbind(Natural, Begin, End, Interval)

数据分析

第一步当然是看自然基金的趋势,从项目总投入和项目数量两个方面来看。一般一个项目跨度是三到四年,经费发放也不是一步到位,因此按照起始年份计算年度投入是有误差的,不过应该不影响对趋势的判断。

项目数量

从项目数量上看,2000 年之前一直在低位,2000 年刚刚超过两百;2006 年有一个较大幅度的增长,随后几年在 500 的水平上小幅增长;从 2009 年开始,自然科学基金资助项目数量开始激增,增长幅度最大的 2012 年增长了 42%!到了2013年之后,在 1600 左右徘徊。

ggplot(Natural, aes(year(Begin))) +
  geom_bar(aes(fill = 项目类别)) +
  labs(
    title = "国家自然科学基金年度项目数量(按起始年份)",
    subtitle= "按照项目类别标示",
    x = "年份",
    y = "项目数量"
  ) +
  scale_x_continuous(breaks = seq(1992, 2017, by = 1)) +
  theme_pander() +
  scale_fill_pander() +
  theme_grey(base_family = "STKaiti") +
  theme(axis.text.x  = element_text(angle = 60, vjust = 0.5))

项目金额

从投入金额上看,从 1992 年微不足道的 275 万元增长到 2000 年 2380 万元,年均增长率 31%;2006 年的增长率 57%,达到近亿元;2000 年到 2008 年的年均增长率是 20%;2009 年到 2013 年 年的近乎翻倍的增长,增长率分别是 38%、28%、39%、78%、32%,年均增长率 37%。2016 年的投入有所减少,是因为数据收集时间是在 11 月,有一部分项目的启动时间是 12月份。

ggplot(Natural, aes(year(Begin))) +
  geom_bar(aes(weight = 金额, fill = 项目类别)) +
  labs(
    title = "国家自然科学基金年度项目总额(按起始年份)",
    subtitle= "按照项目类别标示",
    x = "年份",
    y = "项目总额"
  ) +
  scale_x_continuous(breaks = seq(1992, 2017, by = 1)) +
  theme_pander() +
  scale_fill_pander() +
  theme_grey(base_family = "STKaiti") +
  theme(axis.text.x  = element_text(angle = 60, vjust = 0.5)) 

项目类型

青年项目和面上项目占总数量的近 90%, 从历史趋势上看,二者此消彼长,面上项目呈现减少的趋势,青年项目相应增长。

ggplot(Natural, aes(year(Begin))) +
  geom_bar(aes(fill = 项目类别), position = "fill") +
  labs(
    title = "国家自然科学基金年度项目类型数量占比(按起始年份)",
    x = "年份",
    y = "比例"
  ) +
  scale_x_continuous(breaks = seq(1992, 2017, by = 1)) +
  theme_pander() +
  scale_fill_pander() +
  theme_grey(base_family = "STKaiti") +
  theme(axis.text.x  = element_text(angle = 60, vjust = 0.5))

历年所有项目中,面上项目和青年科学基金项目占据绝大多数,面上项目数量占到项目总数的 53.2%,项目资金占总投入的 54.8%;青年科学基金项目数量占到 33.2%,资金占 18.2%。而重点项目数量上只有 1.9%,但在金额上占到了 10.2%。不同类型项目的资助金额也不同,最高的是创新研究群体科学基金,平均达 484 万元,面上项目和青年科学基金项目分别平均为 34 万和 18 万。

Type <- summarise(group_by(Natural, 项目类别),
                  项目总金额 = sum(金额),
                  项目金额占比 = sum(金额) / sum(Natural$金额) * 100,
                  项目数量 = length(金额),
                  项目数量占比 = length(金额) / length(Natural$项目名称) * 100,
                  项目平均金额 = mean(金额))
Type <- Type[with(Type, order(-项目总金额)), ]
kable(Type, align = "c", digits = 1)
项目类别项目总金额项目金额占比项目数量项目数量占比项目平均金额
面上项目288654.554.8853653.233.8
青年科学基金项目96100.818.2533133.218.0
重点项目53581.310.23031.9176.8
地区科学基金项目27782.35.39485.929.3
国家杰出青年科学基金12990.02.51040.6124.9
创新研究群体科学基金12580.02.4260.2483.8
重大研究计划10605.02.01040.6102.0
优秀青年科学基金8040.01.5720.4111.7
重点国际(地区)合作研究项目7785.01.5420.3185.4
应急项目4679.50.94993.19.4
海外及港澳学者合作研究基金2550.00.5710.435.9
青年-面上连续资助项目1355.10.3240.156.5
项目评估情况

首先做了一个交叉表,发现除了地区科学基金项目、青年项目和面上项目,其他项目均无需评估的……

Type_rate <- as.array(table(Natural$项目类别, Natural$总评))
Type_rate <- round(prop.table(Type_rate, margin = 1) * 100, digits = 1)
kable(Type_rate)
尚未评估延期延期补评无需评估特优
优秀青年科学基金0.00.00.00.0001000.00.0
创新研究群体科学基金0.00.00.00.0001000.00.0
国家杰出青年科学基金0.00.00.00.0001000.00.0
地区科学基金项目2.03.878.20.20000.015.8
应急项目0.00.00.00.0001000.00.0
海外及港澳学者合作研究基金0.00.00.00.0001000.00.0
重大研究计划0.00.00.00.0001000.00.0
重点国际(地区)合作研究项目0.00.00.00.0001000.00.0
重点项目0.00.00.00.0001000.00.0
青年-面上连续资助项目0.00.00.00.0001000.00.0
青年科学基金项目1.110.274.10.20000.813.6
面上项目2.015.756.00.20001.024.9

再看历年估结果,1999 年和 2012 年的项目中很大比例尚未评估,看来 1999 年以前的项目评估结果还没有纳入数据库。在 1999 年到 2011 年中,大概有一半的项目评价是良,优的比例总体是在上升,特优也略微在上升。

ggplot(Natural, aes(year(Begin))) +
  geom_bar(aes(fill = 总评), position = "fill") +
  labs(
    title = "国家自然科学基金年度项目评估情况(按起始年份)",
    subtitle= "按项目数量计算",
    x = "年份",
    y = "项目数量"
  ) +
  scale_x_continuous(breaks = seq(1992, 2017, by = 1)) +
  theme_pander() +
  scale_fill_pander() +
  theme_grey(base_family = "STKaiti") +
  theme(axis.text.x  = element_text(angle = 60, vjust = 0.5))

从 1998 年到 2011 年,14 年中共有 32 次差评,平均每年有 2.3 个项目获得差评,一共有 23 个单位获得差评,超过一次的单位如下:

Bad <- as.data.frame(table(Natural[Natural$总评 == "差", 4]))
kable(Bad[Bad$Freq > 1, ], align = "c")
Var1Freq
11农业部农村经济研究中心2
12北京大学2
14华中科技大学2
20浙江大学3
21清华大学5
依托单位分析

获得项目资金累计前五十的单位如下,排名第一的清华遥遥领先,比第二名北大多 2/3 左右。但是,26 年中,清华的自然科学基金只有 2.5 个亿,只能说明真正的科研资源大头并不是通过自然科学基金向下发放的。自然科学基金作为唯一一个公开披露(也有可能是我没找到别的信息)项目资金的科学基金,这充分说明国家科研资源投入的无序性与不公开性。

Rank50 <- summarise(group_by(Natural, 依托单位),
                    累计金额 = sum(金额),
                    项目数量 = length(金额),
                    项目平均金额 = mean(金额))
Rank50 <- Rank50[with(Rank50, order(-累计金额)), ]
kable(head(Rank50,50), align = "c", row.names = T)
依托单位累计金额项目数量项目平均金额
1清华大学25059.5062140.35346
2北京大学15692.0537342.06984
3上海交通大学14770.0538238.66505
4中国人民大学13652.0538135.83215
5复旦大学13555.9040633.38892
6华中科技大学12383.7833736.74712
7浙江大学12341.1738931.72537
8武汉大学10622.2035929.58830
9南京大学10325.3528835.85191
10中山大学10289.6028036.74857
11大连理工大学9480.7024438.85533
12西安交通大学9395.0031330.01597
13厦门大学8931.3028731.11951
14北京航空航天大学8797.0024535.90612
15上海财经大学8212.1526131.46418
16天津大学7749.6023932.42510
17南开大学7688.2025330.38814
18哈尔滨工业大学7242.9021034.49000
19同济大学7176.0521333.69038
20东北大学7015.5016542.51818
21北京理工大学6840.4015544.13161
22中国科学技术大学6467.0013149.36641
23北京交通大学6258.5012550.06800
24中南大学6122.0013246.37879
25西南财经大学5948.7618631.98258
26湖南大学5611.4414638.43452
27合肥工业大学5604.7013043.11308
28对外经济贸易大学5295.3017031.14882
29华南理工大学4719.3212537.75456
30东北财经大学4713.1016229.09321
31中央财经大学4711.5017526.92286
32南京农业大学4489.9014131.84326
33东南大学4347.9014629.78014
34中国科学院数学与系统科学研究院4177.307952.87722
35四川大学4145.8212034.54850
36电子科技大学4066.0011734.75214
37暨南大学4052.9013330.47293
38江西财经大学4040.5613130.84397
39中国人民解放军国防科学技术大学3835.908843.58977
40中国科学院地理科学与资源研究所3727.605864.26897
41重庆大学3662.5012629.06746
42北京师范大学3483.248341.96675
43中国科学院科技政策与管理科学研究所3424.609934.59192
44山东大学3076.508536.19412
45浙江工商大学3027.9010728.29813
46中南财经政法大学2977.7011126.82613
47西南交通大学2904.6010627.40189
48华东理工大学2764.207536.85600
49南京财经大学2762.908632.12674
50吉林大学2740.108432.62024

将每年项目金额前十的单位进行统计,得到历年前十排行榜。去掉只进过一次前十的单位,26 年中进入前十的次数统计情况如下:

Rank <- list()
j = 1
for(i in 1992:2017){
  D <- Natural[year(Natural$Begin) == i,]
  Rank[[j]] <- names(head(sort(tapply(D$金额, D$依托单位, sum), decreasing = T),10))
  i <- i + 1
  j <- j + 1
}
Rank <- as.data.frame(Rank)
names(Rank) <- 1992:2017
Rank_count <- table(unlist(Rank))
Rank_count_t <- as.data.frame(sort(Rank_count[Rank_count >1], decreasing = T))
names(Rank_count_t) <- c("依托单位", "进入前十次数")
kable(Rank_count_t, align = "c", row.names = T)
依托单位进入前十次数
1清华大学26
2浙江大学23
3上海交通大学18
4复旦大学17
5北京大学17
6中国人民大学15
7西安交通大学13
8华中科技大学13
9武汉大学12
10北京航空航天大学11
11天津大学9
12大连理工大学9
13中山大学7
14南京大学7
15华中理工大学6
16厦门大学5
17中国科学院数学与系统科学研究院4
18中国科学技术大学3
19南开大学3
20东北大学3
21中国科学院科技政策与管理科学研究所2
22合肥工业大学2
23华南理工大学2
24中国科学院地理科学与资源研究所2
25同济大学2
项目名称分析

对所有研究项目的名称进行分词,因为信息量太少,无法做主题模型,出现次数最多的 100 个词语如下:

library(jiebaR)
W <- worker()
Title <- W[Natural$项目名称]
head(sort(table(unlist(Title)), decreasing = T), 100)
##
##     的   研究     与   基于   机制     及     下   企业   影响   理论
##  13156  12797   7024   4143   2297   2264   2045   2041   1863   1774
##     和   中国   及其   模型     对   行为   方法   管理   视角     中
##   1767   1564   1532   1514   1512   1505   1432   1293   1237   1200
##   机理   网络   优化   实证   创新   政策   应用   分析   我国   风险
##   1062   1047   1024   1003    979    960    953    930    882    865
##   环境   经济   决策   策略   模式   系统   动态   发展   组织 供应链
##    860    844    827    788    785    728    723    721    674    655
##   效应   市场   技术   社会   知识   信息   绩效   评价     多   服务
##    640    626    623    609    608    605    595    535    528    519
##   治理   问题     以   产业   关系   结构   选择   演化   战略   设计
##    506    495    471    469    469    463    460    452    450    429
##   作用   制度   投资   控制   区域   协同   路径   协调   建模   为例
##    428    418    412    399    398    389    378    374    373    372
##   面向   产品   因素   数据   评估   过程   复杂   资源   定价     不
##    370    369    363    360    359    358    354    351    350    342
##   资本     在   价值   形成   效率   城市 消费者   生产   质量   政府
##    342    341    326    326    324    316    316    313    311    309
##   构建   体系   金融   农业   农村   能力   对策   公司   团队   创业
##    307    302    291    279    279    276    269    264    259    256

与企业相关的研究远远高于社会、市场和政府。

总结

  1. 国家自然科学基金项目资金在 2008 年以后迅速增长,于 2013 年达到现在到水平,并维持在每年约 7 亿元的水平上。

  2. 青年项目和面上项目是主要形式,二者此消彼长,占总数近 90%。

  3. 除地区科学基金项目、青年项目和面上项目外,其他类型项目均无需评估,无需评估项目占总资金的 21.7%;而在需要评估的前三类中,尚未评估的占 3/4 左右。

  4. 中国科技统计 网站上能够获取到的最新数据是 2013 年的,高校 2013 年从政府获得的经费是 516.9 亿元,而当年的自然科学基金约在 7 亿元左右。完整高效披露信息的比例极小。

  5. 虽然自然科学基金在整个科研经费体系中比例很小,但是从中可以看出依托单位获取国家科研资金的能力。