楼主: olympic
828 0

[程序分享] 模块一:CFPS 数据介绍及数据清理 [推广有奖]

  • 0关注
  • 9粉丝

已卖:482份资源

泰斗

51%

还不是VIP/贵宾

-

威望
0
论坛币
65159 个
通用积分
7567.9673
学术水平
200 点
热心指数
243 点
信用等级
179 点
经验
4002 点
帖子
29105
精华
0
在线时间
10018 小时
注册时间
2014-4-10
最后登录
2025-12-29

初级热心勋章 中级热心勋章 20周年荣誉勋章

楼主
olympic 发表于 2025-6-26 21:43:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
一、CFPS 数据简介
CFPS(China Family Panel Studies)由北京大学社会科学调查中心发起,自2010 年起每两年进行一次全国性纵向跟踪调查,覆盖个人、家庭及社区层面,旨在反映中国经济、教育、健康、家庭等多维社会状况

抽样方式:采用分层多阶段概率抽样,保障样本可代表全国大约 25 个省份
数据结构:多个子数据集对应不同专题,如个人年龄、收入、教育、健康等,结构复杂,变量命名冗长且随波次变化。
常用变量:包括基本人口变量(如 age、gender)、家庭变量(如 household income)、社区变量(如社区医疗设施)等。
若想用 Python 高效处理 CFPS 数据,第一步是熟悉其波次结构、变量命名与权重使用,避免合并和清洗时出错。

二、数据清理原理
1. 数据清理流程与核心原则
加载阶段:用 pandas.read_sas() 或 pd.read_csv() 加载原始文件,结合 codebook 读取对应变量。
变量标准化:统一命名风格(如去掉后缀、调整小写),方便代码引用。
处理缺失值:判断是完全缺失(NA)、合法缺失(如 “拒答”),再决定填充策略:
数值类型:用中位数或均值填充;
类别类型:用出现频率最高者填充;
异常值(如年龄 > 120 或收入 < 0)设置为 NaN。
重复数据排查:尤为双层数据(家庭层 + 个人层)合并后,需要用主键 person_id + wave 判断重复条目。
变量类型转换:确保分类变量转换为 category,时间变量可解析为 datetime。

2. AI 加速工作流程
通过 deepseek 等语言模型可辅助:
自动读取 codebook 并生成变量重命名表;
推荐缺失值处理逻辑;
帮助定位“merge 重复值”来源,协助 debug。

三、Python 清理代码示例
import pandas as pd
import numpy as np

def load_cfps(path):
    return pd.read_sas(path, format='sas7bdat', encoding='utf-8')

# 加载示例数据
df = load_cfps('CFPS2018_individual.sas7bdat')

# 变量重命名 demo(借助 AI 或 codebook)
columns = {
    'RESPID': 'person_id',
    'AGE': 'age',
    'GENDER': 'gender',
    'HHDI': 'hh_income',
}
df.rename(columns=columns, inplace=True)

# 缺失值处理
df['age'] = df['age'].replace([-97, -98, -99], np.nan)
df['age'].fillna(df['age'].median(), inplace=True)

# 异常值排查
mask = (df['hh_income'] < 0) | (df['hh_income'] > 1e7)
df.loc[mask, 'hh_income'] = np.nan

# 重复记录检测
dupes = df.duplicated(subset=['person_id', 'wave'], keep=False)
if dupes.any():
    print(f"发现 {dupes.sum()} 条重复记录,需进一步合并或剔除")

# 格式转换
df['gender'] = df['gender'].map({1:'男', 2:'女'}).astype('category')

# 将清洗函数封装
def clean_cfps(df):
    df = df.rename(columns=columns)
    df['age'].replace([-97,-98,-99], np.nan, inplace=True)
    df['age'].fillna(df['age'].median(), inplace=True)
    mask = (df['hh_income']<0)|(df['hh_income']>1e7)
    df.loc[mask, 'hh_income'] = np.nan
    df['gender'] = df['gender'].map({1:'男',2:'女'}).astype('category')
    return df

df_clean = clean_cfps(df)
df_clean.to_csv('CFPS2018_cleaned.csv', index=False)

以上结构清晰的处理流程与标准化代码设计,有效应对 CFPS 数据的变量命名混乱、缺失值处理、重复值识别等常见痛点。可结合 AI 实现变量批量重命名、异常模式识别,辅助定位 merge 重复错误、提升处理效率。
如需进一步扩展至跨波次合并、面板数据构造、时间效应分割变量生成、merge 后样本完整性检测等高级内容,欢迎继续交流!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:cfps 数据清理 CFP Individual individua

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 08:43