1. 项目背景与核心目标
人均预期寿命是衡量一个国家或地区社会发展水平的重要指标。随着医疗技术进步和公共卫生条件改善,全球范围内的人均预期寿命呈现持续增长趋势。但不同地区、不同时期的变化模式存在显著差异,这背后隐藏着复杂的社会经济因素和公共卫生政策影响。
这个Python数据分析项目旨在运用数据挖掘技术,揭示人均预期寿命变化的深层规律。我们将从世界银行、WHO等权威机构获取全球近50年的寿命统计数据,通过数据清洗、特征工程、可视化分析和建模预测四个关键步骤,回答以下核心问题:
- 哪些因素对寿命变化影响最大?
- 不同地区的变化模式有何差异?
- 能否建立可靠的预测模型?
提示:本项目需要Python 3.8+环境,推荐使用Anaconda管理依赖。主要工具包包括pandas、numpy、matplotlib、seaborn和scikit-learn。
2. 数据获取与预处理
2.1 数据源选择与获取
可靠的数据源是分析的基础。本项目主要使用两个公开数据集:
-
世界银行公开数据集(1960-2022年)
- 包含200+国家/地区的GDP、医疗支出、教育水平等指标
- 通过
wbdata库直接获取
python复制import wbdata as wb indicators = {"SP.DYN.LE00.IN": "life_expectancy", "SH.XPD.CHEX.GD.ZS": "health_expenditure"} df = wb.get_dataframe(indicators, country="all") -
WHO全球健康观察站数据
- 提供更详细的公共卫生指标
- 需从官网下载CSV后处理
2.2 数据清洗关键步骤
原始数据存在大量缺失值和异常值,需进行严格清洗:
python复制# 处理缺失值
df = df.dropna(subset=['life_expectancy']) # 删除关键字段缺失的记录
df['health_expenditure'] = df.groupby('region')['health_expenditure'].transform(
lambda x: x.fillna(x.mean())) # 按地区填充
# 异常值检测
Q1 = df['life_expectancy'].quantile(0.25)
Q3 = df['life_expectancy'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['life_expectancy'] < (Q1 - 1.5*IQR)) |
(df['life_expectancy'] > (Q3 + 1.5*IQR)))]
2.3 特征工程实践
构建更有解释力的衍生特征:
python复制# 计算年度变化率
df['le_growth'] = df.groupby('country')['life_expectancy'].pct_change()
# 创建发展水平分类
bins = [0, 50, 65, 75, 90]
labels = ['低', '中低', '中高', '高']
df['development_level'] = pd.cut(df['life_expectancy'], bins=bins, labels=labels)
3. 探索性数据分析(EDA)
3.1 全球趋势可视化
使用seaborn绘制动态变化趋势:
python复制import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
sns.lineplot(data=df, x='year', y='life_expectancy', hue='region',
estimator='median', errorbar=None)
plt.title('全球各地区预期寿命变化趋势(1960-2022)')
plt.xlabel('年份')
plt.ylabel('预期寿命(岁)')
plt.legend(bbox_to_anchor=(1.05,1))
plt.tight_layout()
3.2 关键影响因素分析
通过相关系数矩阵识别强相关因素:
python复制corr_matrix = df[['life_expectancy', 'health_expenditure',
'GDP_per_capita', 'education_years']].corr()
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('影响因素相关系数矩阵')
3.3 区域差异对比
使用箱线图展示地区差异:
python复制plt.figure(figsize=(10,6))
sns.boxplot(data=df, x='region', y='le_growth')
plt.xticks(rotation=45)
plt.title('各地区预期寿命年增长率分布')
4. 建模分析与预测
4.1 特征重要性分析
使用随机森林评估特征重要性:
python复制from sklearn.ensemble import RandomForestRegressor
X = df[['health_expenditure', 'GDP_per_capita', 'education_years']]
y = df['life_expectancy']
model = RandomForestRegressor(n_estimators=100)
model.fit(X, y)
importance = pd.Series(model.feature_importances_, index=X.columns)
importance.sort_values().plot(kind='barh')
plt.title('特征重要性排序')
4.2 时间序列预测
构建ARIMA模型预测未来趋势:
python复制from statsmodels.tsa.arima.model import ARIMA
# 以中国数据为例
china = df[df['country'] == 'China'].set_index('year')['life_expectancy']
model = ARIMA(china, order=(2,1,1))
results = model.fit()
forecast = results.get_forecast(steps=10)
forecast_ci = forecast.conf_int()
plt.plot(china, label='实际值')
plt.plot(forecast.predicted_mean, label='预测值')
plt.fill_between(forecast_ci.index,
forecast_ci.iloc[:,0],
forecast_ci.iloc[:,1], alpha=0.2)
plt.legend()
plt.title('中国预期寿命10年预测')
4.3 聚类分析
识别相似发展模式的国家群体:
python复制from sklearn.cluster import KMeans
# 提取关键特征矩阵
cluster_df = df.pivot_table(index='country',
columns='year',
values='life_expectancy').dropna()
# 肘部法则确定最佳K值
inertia = []
for k in range(1,10):
kmeans = KMeans(n_clusters=k)
kmeans.fit(cluster_df)
inertia.append(kmeans.inertia_)
plt.plot(range(1,10), inertia)
plt.xlabel('K值')
plt.ylabel('SSE')
plt.title('肘部法则确定最佳聚类数')
5. 实战经验与优化建议
5.1 数据质量处理技巧
- 对于小国数据缺失问题,可采用区域均值填充
- 处理极端值时,建议保留历史事件注释(如战争、疫情)
- 使用
missingno矩阵可视化缺失模式:python复制import missingno as msno msno.matrix(df)
5.2 模型优化方向
- 尝试XGBoost等更先进的集成方法
- 加入气候、政策等外部变量
- 使用Prophet处理节假日效应
5.3 可视化增强方案
- 使用
plotly创建交互式地图 - 添加动态时间轴控件
- 结合Tableau制作仪表盘
注意:当处理国际数据时,务必统一国家名称标准。推荐使用
pycountry库进行国家代码转换:python复制import pycountry def get_country_code(name): try: return pycountry.countries.lookup(name).alpha_3 except: return None df['country_code'] = df['country'].apply(get_country_code)
6. 典型问题排查
6.1 数据不一致问题
当世界银行与WHO数据出现矛盾时:
- 检查指标定义是否一致
- 优先采用更大样本量的数据源
- 标注数据差异供后续验证
6.2 模型过拟合处理
- 增加交叉验证轮次
- 引入早停机制
- 使用正则化参数
6.3 可视化失真修正
- 调整坐标轴范围避免夸大差异
- 对数变换处理偏态分布
- 添加数据来源说明
7. 扩展应用场景
本项目的技术框架可迁移应用于:
- 公共卫生政策效果评估
- 医疗保险精算分析
- 养老产业市场预测
- 区域发展不平衡研究
对于更复杂的分析需求,可以考虑:
- 加入卫星遥感数据
- 构建面板数据模型
- 应用深度学习进行图像特征提取
我在实际项目中发现,将预期寿命数据与Google Trends结合,能有效预测医疗需求变化。例如通过搜索"糖尿病症状"的热度变化,可以提前3-6个月预测相关医疗资源需求。
