- 积分
- 341
好友
记录
日志
相册
回帖0
主题
分享
精华
威望 旺
钢镚 分
推荐 人
|

注册后推荐绑定QQ,之后方才可以使用下方的“用QQ帐号登录”。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
NHANSE介绍
NHANES是比较知名的公共数据库,国家健康和营养检查调查 (NHANES,National Health and Nutrition Examination Survey) 是一项基于人群的横断面调查,旨在收集美国成人和儿童的健康和营养状况的信息,该调查的独特之处在于它结合了访谈和体检。该数据库包括Demog Data(人口统计学数据)、Dietary Data(饮食数据)、 Examination Data(检查数据)、Laboratory Data(实验室数据)、Questionnaire Data(问卷数据)、Limited Access Data(有限访问数据)。调查结果将用于确定主要疾病的患病率和疾病的风险因素,也是衡量身高、体重和血压等国家标准的基础。
数据下载
中规中矩下载
1.访问NHANES官方网站:- 进入NHANES数据库官网:https://wwwn.cdc.gov/nchs/nhanes/continuousnhanes/default.aspx
2.选择数据年份和类型:- 在官网首页,点击“NHANES Questionnaires, Datasets, and Related Documentation”栏目,选择你需要的调查年份和数据类型。数据类型包括人口统计数据(Demographics)、饮食数据(Dietary)、检查数据(Examination)、实验室数据(Laboratory)和问卷数据(Questionnaire)。
image
3.下载数据:- 以2017-2018年的一般人口学资料为例,选择“NHANES 2005-2006 Demographics Data”,然后点击数据文件(Data File)下面的相应文件DEMO D Data [XPT-3.4 MB]进行下载。文件类型是.XPT,这是SAS传输格式。
image
4.使用统计软件打开数据:下载的.XPT文件可以用多种应用程序直接读取,如SUDAAN、SPSS、STATA和R。例如,在R中可以使用`read.xport`函数读取数据。
5.设限数据获取:- 如果需要访问受限数据,可以在NHANES官网页面导航栏最下端找到“Research Data Center”菜单,按照指引申请获取设限数据。
python一键下载。下面是具体代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 定义URL
components = ["Demographics", "Dietary", "Examination", "Laboratory", "Questionnaire"]
base_url = "https://wwwn.cdc.gov/nchs/nhanes/search/datapage.aspx?Component="
urls = [base_url + component for component in components]
# 存储链接和文本内容的列表
link_list = []
text_list = []
try:
# 遍历每个 URL
for url in urls:
# 发送 HTTP 请求获取网页内容
response = requests.get(url)
# 检查请求是否成功
response.raise_for_status()
# 使用 BeautifulSoup 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有的超链接
links = soup.find_all('a', href=True)
# 遍历所有超链接并筛选出包含 XPT 的链接和文本
for link in links:
href = link['href']
text = link.get_text(strip=True)
if 'XPT' in href or 'XPT' in text:
link_list.append(href)
text_list.append(text)
# 创建 DataFrame
df = pd.DataFrame({
'链接': link_list,
'文本内容': text_list
})
# 保存为 Excel 文件,此处可自定义文件存储位置
df.to_excel('E:/NHANSE/data.xlsx', index=False)
print("数据已成功写入 E:/NHANSE/data.xlsx 文件。")
except requests.RequestException as e:
print(f"请求出错: {e}")
except Exception as e:
print(f"发生错误: {e}")
上面是第一部分,目的是爬取相对应数据文件的下载链接,然后需要逐个下载到相应的年份文件夹中:
import os
import pandas as pd
import requests
import re
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# 配置重试机制
retry_strategy = Retry(
total=3, # 重试次数
backoff_factor=1, # 重试间隔时间的倍数
status_forcelist=[429, 500, 502, 503, 504], # 遇到这些状态码时进行重试
allowed_methods=["HEAD", "GET", "OPTIONS"] # 允许重试的请求方法
)
adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("https://", adapter)
http.mount("http://", adapter)
# 读取包含链接的 Excel 文件,注:这里要确保文件位置无误
df = pd.read_excel("E:\\NHANSE\\data.xlsx")
# 基础保存路径
base_save_dir = "E:\\NHANSE\\nhanes_files"
# 确保基础保存目录存在
if not os.path.exists(base_save_dir):
os.makedirs(base_save_dir)
# 遍历每个链接
for link in df['link']:
# 构建完整的下载链接
full_link = "https://wwwn.cdc.gov" + link
print(f"处理链接: {full_link}") # 添加调试信息
# 使用正则表达式提取年份
year_match = re.search(r'/(\d{4})/', link)
if year_match:
year = year_match.group(1)
print(f"提取的年份: {year}") # 添加调试信息
else:
print(f"无法从链接 {full_link} 中提取年份信息,跳过该链接。")
continue
# 创建年份文件夹
year_dir = os.path.join(base_save_dir, year)
if not os.path.exists(year_dir):
try:
os.makedirs(year_dir)
print(f"创建文件夹: {year_dir}") # 添加调试信息
except OSError as e:
print(f"创建文件夹 {year_dir} 失败: {e}")
continue
# 下载文件并保存到相应的年份文件夹
try:
response = http.get(full_link, stream=True)
if response.status_code == 200:
filename = link.split('/')[-1]
file_path = os.path.join(year_dir, filename)
with open(file_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"下载成功: {file_path}")
else:
print(f"下载失败: {full_link} 状态码 {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"请求出错: {full_link}, 错误信息: {e}")
NHANSE数据已下载好。不想折腾的可以直接保存下载,链接:https://pan.quark.cn/s/c16b7ee1090c
声明:数据下载仅为方便广大科研人员研究之用。 |
评分
-
查看全部评分
|