← 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.5 54.8 8536 53.2 33.8
青年科学基金项目 96100.8 18.2 5331 33.2 18.0
重点项目 53581.3 10.2 303 1.9 176.8
地区科学基金项目 27782.3 5.3 948 5.9 29.3
国家杰出青年科学基金 12990.0 2.5 104 0.6 124.9
创新研究群体科学基金 12580.0 2.4 26 0.2 483.8
重大研究计划 10605.0 2.0 104 0.6 102.0
优秀青年科学基金 8040.0 1.5 72 0.4 111.7
重点国际(地区)合作研究项目 7785.0 1.5 42 0.3 185.4
应急项目 4679.5 0.9 499 3.1 9.4
海外及港澳学者合作研究基金 2550.0 0.5 71 0.4 35.9
青年-面上连续资助项目 1355.1 0.3 24 0.1 56.5
项目评估情况

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

Type_rate <- as.array(table(Natural$项目类别, Natural$总评))
Type_rate <- round(prop.table(Type_rate, margin = 1) * 100, digits = 1)
kable(Type_rate)
尚未评估 延期 延期补评 无需评估 特优
优秀青年科学基金 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
创新研究群体科学基金 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
国家杰出青年科学基金 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
地区科学基金项目 2.0 3.8 78.2 0.2 0 0 0 0.0 15.8
应急项目 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
海外及港澳学者合作研究基金 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
重大研究计划 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
重点国际(地区)合作研究项目 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
重点项目 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
青年-面上连续资助项目 0.0 0.0 0.0 0.0 0 0 100 0.0 0.0
青年科学基金项目 1.1 10.2 74.1 0.2 0 0 0 0.8 13.6
面上项目 2.0 15.7 56.0 0.2 0 0 0 1.0 24.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")
Var1 Freq
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.50 621 40.35346
2 北京大学 15692.05 373 42.06984
3 上海交通大学 14770.05 382 38.66505
4 中国人民大学 13652.05 381 35.83215
5 复旦大学 13555.90 406 33.38892
6 华中科技大学 12383.78 337 36.74712
7 浙江大学 12341.17 389 31.72537
8 武汉大学 10622.20 359 29.58830
9 南京大学 10325.35 288 35.85191
10 中山大学 10289.60 280 36.74857
11 大连理工大学 9480.70 244 38.85533
12 西安交通大学 9395.00 313 30.01597
13 厦门大学 8931.30 287 31.11951
14 北京航空航天大学 8797.00 245 35.90612
15 上海财经大学 8212.15 261 31.46418
16 天津大学 7749.60 239 32.42510
17 南开大学 7688.20 253 30.38814
18 哈尔滨工业大学 7242.90 210 34.49000
19 同济大学 7176.05 213 33.69038
20 东北大学 7015.50 165 42.51818
21 北京理工大学 6840.40 155 44.13161
22 中国科学技术大学 6467.00 131 49.36641
23 北京交通大学 6258.50 125 50.06800
24 中南大学 6122.00 132 46.37879
25 西南财经大学 5948.76 186 31.98258
26 湖南大学 5611.44 146 38.43452
27 合肥工业大学 5604.70 130 43.11308
28 对外经济贸易大学 5295.30 170 31.14882
29 华南理工大学 4719.32 125 37.75456
30 东北财经大学 4713.10 162 29.09321
31 中央财经大学 4711.50 175 26.92286
32 南京农业大学 4489.90 141 31.84326
33 东南大学 4347.90 146 29.78014
34 中国科学院数学与系统科学研究院 4177.30 79 52.87722
35 四川大学 4145.82 120 34.54850
36 电子科技大学 4066.00 117 34.75214
37 暨南大学 4052.90 133 30.47293
38 江西财经大学 4040.56 131 30.84397
39 中国人民解放军国防科学技术大学 3835.90 88 43.58977
40 中国科学院地理科学与资源研究所 3727.60 58 64.26897
41 重庆大学 3662.50 126 29.06746
42 北京师范大学 3483.24 83 41.96675
43 中国科学院科技政策与管理科学研究所 3424.60 99 34.59192
44 山东大学 3076.50 85 36.19412
45 浙江工商大学 3027.90 107 28.29813
46 中南财经政法大学 2977.70 111 26.82613
47 西南交通大学 2904.60 106 27.40189
48 华东理工大学 2764.20 75 36.85600
49 南京财经大学 2762.90 86 32.12674
50 吉林大学 2740.10 84 32.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. 虽然自然科学基金在整个科研经费体系中比例很小,但是从中可以看出依托单位获取国家科研资金的能力。