GlobalBurdenR包系列教程(一):从数据读取到三线表生成
5分钟上手GlobalBurdenR,掌握GBD数据分析的首要步骤
开篇:你是否面临过这些问题?
如果你正在从事GBD(Global Burden of Disease)数据分析,你可能遇到:
- 数据量庞大: IHME下载的数据包含数十个CSV文件,每个文件数百MB,用Excel根本无法打开
- 列名混乱: 原始数据有
、measure_name
等18列,列名冗长且不统一location_name - 国家名称不规范: “People’s Republic of China”、“中国”、“China”…同一个国家有多种写法
- 三线表制作耗时: 手工整理1990年vs 2023年的数据对比,统计学指标计算,Word排版…耗时数小时
如果你有上述困扰,GlobalBurdenR包将彻底解决这些问题!
本文目标
读完本文,你将学会:
- 使用GlobalBurdenR包一键读取并合并多个GBD数据文件
- 规范化国家名称,统一数据格式
- 自动生成符合发表要求的三线表(Word格式)
- 理解GBD数据的基本结构和质量检查方法
本文使用真实的GBD 2023结核病数据进行演示!
第一步:环境准备
1.1 安装GlobalBurdenR包
# 安装devtools包(如果尚未安装)
install.packages("devtools")
# 从本地安装GlobalBurdenR
devtools::install("path/to/GlobalBurdenR")
# 或者从GitHub安装(如果包已上传)
# devtools::install_github("username/GlobalBurdenR")
1.2 加载包和依赖
library(GlobalBurdenR)
# 一键加载所有必需的依赖包(~30个包)
library_required_packages()
运行结果:
授权验证通过,欢迎使用 GlobalburdenR 包!
=== 第1步: 加载必需包 ===
所有包已成功加载。
提示:
library_required_packages() 会自动加载dplyr, ggplot2, data.table等30+个必需包,无需手动逐个加载!
第二步:数据读取与合并
2.1 数据准备
本案例使用的数据:
- 数据来源: IHME GBD Results Tool (https://vizhub.healthdata.org/gbd-results/)
- 疾病: 结核病(Tuberculosis)
- 数据类型: 死亡数据(Deaths)
- 年份范围: 1990-2023
- 地理范围: 全球所有国家和地区
- 文件格式: 6个ZIP压缩包
2023数据/
├── IHME-GBD_2023_DATA-04733f0b-1.zip (3.3 MB)
├── IHME-GBD_2023_DATA-1bc6efb6-1.zip (437 KB)
├── IHME-GBD_2023_DATA-2faedb75-1.zip (3.5 MB)
├── IHME-GBD_2023_DATA-7e65b113-1.zip (54 KB)
├── IHME-GBD_2023_DATA-e78489ab-1.zip (3.5 MB)
└── IHME-GBD_2023_DATA-fa473aeb-1.zip (514 KB)
2.2 使用GlobalBurdenR一键读取
# 设置工作目录
setwd('/Users/yuzheng/Documents/GBD数据/2023SDI和pop数据')
# 一行代码读取并合并所有ZIP文件!
data <- unzip_and_merge_csv_files_vroom_progress('2023数据/')
运行过程实时显示:
=== 第2步: 读取并合并2023数据 ===
找到 6 个压缩文件,开始解压缩...
正在解压文件 1,共 6 个: IHME-GBD_2023_DATA-04733f0b-1.zip
成功解压: IHME-GBD_2023_DATA-04733f0b-1.zip
正在解压文件 2,共 6 个: IHME-GBD_2023_DATA-1bc6efb6-1.zip
成功解压: IHME-GBD_2023_DATA-1bc6efb6-1.zip
正在解压文件 3,共 6 个: IHME-GBD_2023_DATA-2faedb75-1.zip
成功解压: IHME-GBD_2023_DATA-2faedb75-1.zip
正在解压文件 4,共 6 个: IHME-GBD_2023_DATA-7e65b113-1.zip
成功解压: IHME-GBD_2023_DATA-7e65b113-1.zip
正在解压文件 5,共 6 个: IHME-GBD_2023_DATA-e78489ab-1.zip
成功解压: IHME-GBD_2023_DATA-e78489ab-1.zip
正在解压文件 6,共 6 个: IHME-GBD_2023_DATA-fa473aeb-1.zip
成功解压: IHME-GBD_2023_DATA-fa473aeb-1.zip
找到 6 个CSV文件,开始合并...
正在读取CSV文件 1,共 6 个: IHME-GBD_2023_DATA-04733f0b-1.csv
正在读取CSV文件 2,共 6 个: IHME-GBD_2023_DATA-1bc6efb6-1.csv
正在读取CSV文件 3,共 6 个: IHME-GBD_2023_DATA-2faedb75-1.csv
正在读取CSV文件 4,共 6 个: IHME-GBD_2023_DATA-7e65b113-1.csv
正在读取CSV文件 5,共 6 个: IHME-GBD_2023_DATA-e78489ab-1.csv
正在读取CSV文件 6,共 6 个: IHME-GBD_2023_DATA-fa473aeb-1.csv
成功合并 6 个CSV文件,总行数: 312018
清理临时解压目录...
2.3 查看读取结果
cat("数据读取完成!\n")
cat("- 数据行数:", nrow(data), "\n")
cat("- 数据列数:", ncol(data), "\n")
cat("- 列名:", paste(names(data), collapse=", "), "\n")
head(data, 3)
输出结果:
数据读取完成!
- 数据行数: 312018
- 数据列数: 16
- 列名: measure_id, measure_name, location_id, location_name, sex_id, sex_name,
age_id, age_name, cause_id, cause_name, metric_id, metric_name,
year, val, upper, lower
# A tibble: 3 × 16
measure_id measure_name location_id location_name sex_id sex_name age_id
<dbl> <chr> <dbl> <chr> <dbl> <chr> <dbl>
1 1 Deaths 298 American Samoa 3 Both 1
2 1 Deaths 298 American Samoa 3 Both 1
3 1 Deaths 298 American Samoa 3 Both 6
# ... with 9 more variables: age_name <chr>, cause_id <dbl>, cause_name <chr>,
# metric_id <dbl>, metric_name <chr>, year <dbl>, val <dbl>, upper <dbl>,
# lower <dbl>
数据规模: 31万行数据,涵盖1990-2023年全球结核病死亡数据
2.4 为何此函数强大?
unzip_and_merge_csv_files_vroom_progress() 的优势:
- 自动解压缩: 无需手动解压ZIP文件
- 批量读取: 自动识别目录下所有CSV文件并合并
- 高性能: 基于vroom包,读取速度比read.csv快10-50倍
- 进度显示: 实时显示处理进度,大文件不再焦虑
- 自动清理: 读取完成后自动删除临时解压文件
- 错误处理: 单个文件损坏不影响整体流程
第三步:国家名称规范化
3.1 为何需要规范化?
GBD原始数据中的国家名称是“官方全称”,例如:
- “People’s Republic of China”
- “United Kingdom of Great Britain and Northern Ireland”
- “Islamic Republic of Iran”
这些冗长的名称在数据分析和可视化时非常不便。GlobalBurdenR的
gbd_standardize_location_names() 函数会自动将其转换为:
- “China”
- “United Kingdom”
- “Iran (Islamic Republic of)”
3.2 一行代码规范化
data <- gbd_standardize_location_names(data)
运行结果(部分展示):
=== 第3步: 标准化国家名称 ===
以下位置名称已被标准化:
Location ID | 原名称 -> 标准名称
----------------------------------------
6 | People's Republic of China -> China
95 | United Kingdom of Great Britain and Northern Ireland -> United Kingdom
142 | Islamic Republic of Iran -> Iran (Islamic Republic of)
80 | French Republic -> France
81 | Federal Republic of Germany -> Germany
82 | Hellenic Republic -> Greece
92 | Kingdom of Spain -> Spain
93 | Kingdom of Sweden -> Sweden
86 | Republic of Italy -> Italy
141 | Arab Republic of Egypt -> Egypt
160 | Islamic Republic of Afghanistan -> Afghanistan
163 | Republic of India -> India
... (共标准化152个国家名称)
国家名称标准化完成!
- 唯一地区数: 204
- 地区示例: American Samoa, Andorra, Afghanistan, Angola, Albania, ...
智能映射
: 函数内建了204个国家/地区的标准名称对照表,覆盖GBD数据库的所有地理单位!
? 第四步: 数据质量检验
4.1 为何要进行质量检验?
原始数据可能存在以下问题: 零值/负值(不符合理论逻辑) 缺失值(干扰统计分析) 异常值(极端数据点) 重复记录4.2 利用debug_gbd_data_check()检验
data <- debug_gbd_data_check(data)函数作用:
- ? 检验零值和负值
- ? 探测缺失值(NA)
- ? 确定重复行
- ? 核实数据完整性
- ? 自动解决常见问题
???? 注意 : 此函数在检测到问题时会生成详尽报告,并在可行情况下自动修复 ???? 第五步: 存储处理后的数据
5.1 存储为CSV文件
write.csv(data, '2023TB.csv', row.names=FALSE)文件详情:
数据已保存到: 2023TB.csv
文件大小: 39.05 MB
总行数: 312018
5.2 数据架构(处理后)
# 查看处理后的数据列名 names(data) # [1] "measure" "location" "sex" "age" "cause" # [6] "metric" "year" "val" "upper" "lower" # 查看前5行 head(data, 5)输出示例:
measure location sex age cause metric year val upper lower
1 Deaths American Samoa Both <5 years Tuberculosis Number 1990 0.046835 0.069716 0.028074
2 Deaths American Samoa Both <5 years Tuberculosis Rate 1990 0.611558 0.910336 0.366585
3 Deaths American Samoa Both 5-9 years Tuberculosis Number 1990 0.017863 0.026740 0.011162
4 Deaths American Samoa Both 5-9 years Tuberculosis Rate 1990 0.292182 0.437387 0.182578
5 Deaths American Samoa Both 10-14 years Tuberculosis Number 1990 0.019491 0.026934 0.012427
???? 列名对比 : 原始16列(含ID列) → 标准11列(仅保留分析必要列)
measure_name
→
measure
location_name
→
location
???? 第六步: 创建三线表
6.1 何为三线表?
三线表是学术文章中最常使用的表格形式,其特征为:- ? 只有3条水平线(顶部、标题行下方、底部)
- ? 没有垂直线
- ? 数据对比清晰(1990 vs 2023)
- ? 包含置信区间
- ? 符合多数期刊的要求
6.2 一键创建三线表
# 定义需展示的区域
location <- c("Global",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa", "China", 'Egypt')
# 定义表格中区域的显示顺序
order <- c("Overall", "Female", "Male",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa",
"China", 'Egypt')
# 生成三线表
t2 <- GBD_table(
input_path = "2023TB.csv",
measure = "Deaths",
locations = location,
regions_order = order,
year1 = 1990,
year2 = 2023,
output_path = '222.docx'
)
6.3 参数解释
| 参数 | 说明 | 示例 |
|---|---|---|
| 输入数据文件路径 | |
| 测量指标 | , , |
| 需展示的区域列表 | , |
| 表格中区域的显示顺序 | |
| 起始年份 | |
| 结束年份 | |
| 输出Word文件路径 |
6.4 生成的表格预览
print(t2)实际生成的三线表内容:
| 地区/分组 | 1990年死亡数 [95% UI] | 1990年死亡率 (每10万人) [95% UI] | 2023年死亡数 [95% UI] | 2023年死亡率 (每10万人) [95% UI] | EAPC (%) [95% CI] |
|---|---|---|---|---|---|
| Overall | 18866.12 [14417.44-23895.53] | 42.59 [32.43-54.2] | 10105.26 [8065.55-12447.22] | 11.65 [9.24-14.41] | -4.0 [-4.14 to -3.85] |
| 性别 | |||||
| Female | 7476.69 [4014.1-10760.18] | 31.65 [17.12-45.59] | 3883.76 [2631.7-5484.06] | 8.75 [5.89-12.49] | -4.03 [-4.15 to -3.91] |
| Male | 11389.43 [8753.01-15743.97] | 55.95 [43.1-77.37] | 6221.5 [4776.78-7994.83] | 14.87 [11.38-19.21] |
-4.04 [-4.22 to -3.87]
Socio-demographic index
High-middle SDI
2561.99 [2049.43-3092.93]
32.23 [25.61-39.4]
1343.96 [1122.71-1568.82]
6.98 [5.83-8.14]
-4.71 [-4.79 to -4.63]
Middle SDI
2283.75 [1710.78-3045.51]
61.13 [45.6-81.57]
1174.86 [939.21-1408.92]
13.27 [10.52-15.89]
-4.47 [-4.64 to -4.3]
Low-middle SDI
5516.74 [4097.48-7333.06]
121.07 [89.95-163.9]
2617.25 [2090.62-3298.4]
27.15 [21.6-34.32]
-4.48 [-4.67 to -4.29]
Low SDI
7012.23 [5025.32-9402.32]
150.71 [106.2-199.87]
4502.91 [3230.17-6023.12]
41.55 [30.17-54.55]
-3.93 [-4.11 to -3.76]
Region
Tropical Latin America
84.39 [77.6-92.15]
7.52 [6.87-8.22]
75.47 [71.69-79.57]
2.91 [2.77-3.07]
-3.8 [-4.15 to -3.45]
Eastern Sub-Saharan Africa
1847.22 [1319.18-2476.82]
172.42 [123.04-226.48]
1171.78 [808.14-1542.87]
47.43 [33-62.25]
-4.11 [-4.32 to -3.9]
China
1746.28 [1280.14-2364.2]
19.5 [14.09-26.33]
247.52 [183.6-346.22]
1.17 [0.86-1.64]
-8.61 [-8.86 to -8.36]
Egypt
21.69 [17.11-26.83]
6.71 [5.12-9.17]
7.5 [5.54-9.78]
1.16 [0.85-1.57]
-4.41 [-4.72 to -4.1]
表格解读
: Overall行 : 全球总体结核病死亡数从1990年的18,866例下降到2023年的10,105例, 年均减少4.0%
性别差异 : 男性死亡率(14.87/10万)显著高于女性(8.75/10万) 两性的年均变化率相近(约-4%)
SDI分层 : Low SDI 国家死亡率最高(41.55/10万),但下降速度最慢(-3.93%) High-middle SDI 国家下降速度最快(-4.71%)
中国表现突出 : 死亡数从1,746例降至248例,降幅达到 85.8% EAPC为**-8.61%**,远超全球平均水平(-4.0%)
死亡率从19.5/10万降至1.17/10万
EAPC (Estimated Annual Percentage Change) : 负值表明下降趋势 绝对值越大,下降速度越快
注 : UI = Uncertainty Interval(不确定性区间),相当于95%置信区间 CI = Confidence Interval(置信区间)
所有数值已自动格式化,保留两位小数
6.5 三线表的格式特点
GlobalBurdenR生成的三线表符合国际期刊标准 :
格式要素 说明 示例
表格线条 仅3条横线(顶线、表头线、底线),无竖线 符合APA、AMA、Lancet等期刊要求
数据分层 按性别、SDI、地区分层展示 Overall → Sex → SDI → Region
置信区间 方括号表示95% UI/CI 18866.12 [14417.44-23895.53]
小数精度 死亡数保留两位,死亡率保留两位 自动格式化
分组标识 使用粗体标识分组标题 Overall , Sex , Region
EAPC展示 包含点估计和95%置信区间 -4.0 [-4.14 to -3.85]
表格列说明 :
列1 : 地区/分组名称
列2 : 1990年死亡数(绝对数) [95% UI]
列3 : 1990年年龄标准化死亡率(每10万人) [95% UI]
列4 : 2023年死亡数(绝对数) [95% UI]
列5 : 2023年年龄标准化死亡率(每10万人) [95% UI]
列6 : EAPC及其95%置信区间
6.6 输出文件
三线表生成完成!
- 输出文件: 222.docx
- 文件大小: 12.1 KB
- 表格行数: 14
- 表格列数: 6
打开
222.docx
文件,你将看到 :
? 标准三线表格式(仅3条横线)
? 1990年与2023年数据对比
? 按性别、SDI、地区分层展示
? 包含95%不确定性区间和置信区间
? 自动计算EAPC及其统计显著性
? 可直接插入论文,无需手工调整!
Word表格的优势 :
- 可在Word中直接编辑字体、色彩
- 可复制粘贴至其他文档
- 可根据期刊需求调整样式
- 支持.docx格式,兼容性良好
- 完整代码汇总
# =====================================
# GlobalBurdenR包第一章完整示例代码
# 功能:数据读取、标准化、三线表生成
# =====================================
# 步骤1:加载包
setwd('/Users/yuzheng/Documents/GBD数据/2023SDI和pop数据')
library(GlobalBurdenR)
library_required_packages()
# 步骤2:读取并合并2023数据
data <- unzip_and_merge_csv_files_vroom_progress('2023数据/')
# 步骤3:标准化国家名称
data <- gbd_standardize_location_names(data)
# 步骤4:数据质量检查
data <- debug_gbd_data_check(data)
# 步骤5:保存处理后数据
write.csv(data, '2023TB.csv', row.names=FALSE)
# 步骤6:生成三线表
location <- c("Global",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa", "China", 'Egypt')
order <- c("Overall", "Female", "Male",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa",
"China", 'Egypt')
t2 <- GBD_table(
input_path = "2023TB.csv",
measure = "Deaths",
locations = location,
regions_order = order,
year1 = 1990,
year2 = 2023,
output_path = '222.docx'
)
print(t2)
运行时间
: 大约30-60秒(依据数据量和计算机性能)
核心函数总结
| 函数名 | 功能 | 输入 | 输出 |
|---|---|---|---|
|
批量读取并合并ZIP/CSV文件 | 目录路径 | 合并后的数据框 |
|
标准化国家名称 | 数据框 | 标准化后的数据框 |
|
数据质量检查 | 数据框 | 检查并修复后的数据框 |
|
生成三线表 | CSV文件路径 | Word文档 + 数据框 |
知识拓展
GBD数据的标准结构
GlobalBurdenR处理后的数据包含以下核心列:
| 列名 | 说明 | 示例值 |
|---|---|---|
|
测量指标 | Deaths, Incidence, Prevalence, DALYs |
|
地理位置 | Global, China, USA |
|
性别 | Male, Female, Both |
|
年龄组 | <5 years, 15-19 years, All ages |
|
疾病/病因 | Tuberculosis, HIV/AIDS |
|
指标类型 | Number(绝对数), Rate(率) |
|
年份 | 1990-2023 |
|
点估计值 | 数值 |
|
95% UI上限 | 数值 |
|
95% UI下限 | 数值 |
SDI分层说明
SDI (Socio-demographic Index): 是社会人口学指数,GBD研究将全球国家分为5个SDI层级:
- High SDI: 高社会人口学指数(如美国、日本、西欧国家)
- High-middle SDI: 中高SDI(如中国、巴西、俄罗斯)
- Middle SDI: 中等SDI(如印度、印尼、菲律宾)
- Low-middle SDI: 中低SDI(如尼日利亚、巴基斯坦、孟加拉国)
- Low SDI: 低SDI(如多数撒哈拉以南非洲国家)
? 常见问题解答(FAQ)
- Q1: 为何需要标准化国家名称?
- A: 简化数据处理: 短名称更利于筛选和分组;
可视化友好: 图表标签不会太长;
跨数据集匹配: 便于与其他数据源(如SDI数据)合并。 - Q2: 如果我的数据不是ZIP格式,而是普通CSV,如何处理?
- A: 使用
merge_csv_files_vroom_progress()
函数:
data <- merge_csv_files_vroom_progress('CSV文件路径/')
Q3: 三线表能够自定义格式吗?
A: 可以!
GBD_table()
函数提供多种自定义设置,比如:
选择不同的评估指标(
measure)
自定义年份比较(
year1, year2)
调整区域排序(
regions_order)
详细参数请查阅函数文档:
?GBD_table
Q4: 生成的Word表格能直接用于论文吗?
A: 可以!生成的表格满足以下标准:
? 标准化三线表格式
? 包含95%不确定区间(UI)
? 数据精确度适宜(自动四舍五入)
? 满足JAMA、Lancet等顶级期刊的要求
不过建议依据目标期刊的具体需求微调格式(如字体、字号等)。
Q5: 数据量过大,内存不足怎么办?
A: GlobalBurdenR已经进行了内存优化,但如果数据量特别庞大(例如全球所有疾病),可以考虑:
分批加载: 先按疾病或区域分组下载
使用筛选: 在
gbd_filter()中预先筛选所需数据
增加内存: 调整R的内存限制
memory.limit(size=16000) # 设置为16GB
???? 下期预告
GlobalBurdenR包系列教程(二): 数据筛选与EAPC计算
下篇将涵盖:
? 使用
gbd_filter()进行复杂条件筛选
? 计算EAPC(估计年度百分比变化)
? 生成EAPC世界地图和条形图
? 识别疾病负担的变化趋势
???? 本文资源
?
完整代码: 见"完整代码汇总"部分
?
示例数据: GBD 2023结核病数据(可从IHME官网下载)
?
输出示例:
2023TB.csv (39MB), 222.docx (12KB)
???? 联系与反馈
若您在使用过程中遇到问题,或有任何功能建议,欢迎通过以下途径联系我们:
???? Email: 1007489299@qq.com
???? 微信公众号留言
???? GitHub Issues(如果包已开源)
?
总结
本文利用真实的GBD 2023结核病数据,展示了GlobalBurdenR包的主要功能:
?
数据读取: 一行代码即可读取并合并多个ZIP/CSV文件
?
名称标准化: 自动将152个国家的官方全称转换为标准名称
?
质量检查: 自动检测并修复数据问题
?
三线表生成: 一键生成可用于发表的Word表格
核心理念: 简化、加速并确保GBD数据分析的可重复性!
下一篇见!
????
GlobalBurdenR v3.0.0 | 让GBD数据分析更简单


雷达卡


京公网安备 11010802022788号







