继续上三讲 模块一:CFPS 数据介绍及数据清理
https://bbs.pinggu.org/thread-15729023-1-1.html
模块二:AI+Python进行单数据库清理
https://bbs.pinggu.org/thread-15729080-1-1.html
模块三:AI+Python进行多数据库合并与结构优化
https://bbs.pinggu.org/thread-15729082-1-1.html
一、任务目标
CFPS 数据中,每位受访者都有唯一的 pid(个人编号)和 fid(家庭编号)。为了研究代际关系与家庭结构,需要将个人数据重新组合成“家庭面板结构”,如子女与父母在一张表中显示,方便进行代际分析、资源配置研究等。
二、技术步骤与处理流程
1. 家庭关系重新定义
根据 CFPS 的 relation 字段判断个体与户主之间的关系。
例如:
1 = 户主
2 = 户主配偶
3 = 户主子女
根据该字段提取子女(relation=3)记录,并保留其 fid(家庭号)、pid(子女号)、age、education 等信息。
2. 构造子女面板数据结构
每条记录是一个子女,附带其家庭号及自身信息。如果多个子女属于同一家,最终结果可用于后续聚合分析(如家庭教育投资、代际支持等)。
3. 批量处理变量与标签
使用 Python 的 rename() 将变量改为标准化结构,例如将 age 改为 child_age。添加标签描述便于后续建模解释。
4. 合并家庭层级信息
使用 merge() 函数将子女信息与家庭主表(例如家庭经济数据)对齐。保留每个家庭对应的全部子女信息。
三、Python 示例代码框架
import pandas as pd
# 读取原始 CFPS 数据
df_person = pd.read_csv("cfps2018_person.csv") # 包含 pid, fid, relation, age, gender 等字段
df_family = pd.read_csv("cfps2018_family.csv") # 包含 fid 及家庭层信息,如收入、住房等
# 1. 提取子女记录
df_children = df_person[df_person['relation'] == 3].copy()
# 2. 构造子女面板
df_children_panel = df_children[['fid', 'pid', 'age', 'gender', 'edu_support']]
df_children_panel.rename(columns={
'pid': 'child_pid',
'age': 'child_age',
'gender': 'child_gender',
'edu_support': 'child_edu_support'
}, inplace=True)
# 3. 合并到家庭主表
df_family_extended = pd.merge(df_family, df_children_panel, on='fid', how='left')
# 4. 保存或查看结果
df_family_extended.to_csv("cfps_family_child_panel.csv", index=False)
四、说明与建议
如果家庭中有多个子女,建议对 df_children_panel 做 groupby('fid') 聚合处理。
可添加更多子女变量,如 health_score、math_score 等用于研究家庭教育投入。
后续模块可结合家庭经济数据做面板回归、层级建模、多层网络分析等。