当前位置: 首页 > article >正文

Python数据分析-城市空气质量与健康影响分析

一、研究背景

随着全球城市化进程的加速,越来越多的人口集中在城市地区,城市空气污染成为了一个全球性的环境问题。空气污染物如PM2.5、二氧化氮(NO2)和臭氧(O3)等,对人类的健康构成了严重威胁,尤其是在大城市。长期暴露在空气污染下,可能会导致心血管疾病、呼吸系统疾病甚至早期死亡等健康问题。

美国作为全球最大的工业化国家之一,其城市空气质量问题尤为严重。因此,研究美国主要城市的空气质量及其对健康的潜在影响,具有重要的现实意义。本研究的数据集提供了关于美国主要城市的综合空气质量信息,并结合了与健康风险相关的变量,使得我们可以通过分析这些数据,探讨空气质量与健康风险之间的关系,为政策制定者提供数据支持,帮助制定更加科学的城市环境治理政策。

二、研究意义

本研究的意义主要体现在以下几个方面:

  1. 提高公众意识:通过对空气质量与健康风险之间关系的分析,可以提升公众对空气污染的危害认知,促使更多人采取措施减少暴露于污染环境中的风险。

  2. 指导城市规划和环境治理:通过识别污染较为严重的城市或时间段,相关部门可以有针对性地制定空气污染治理措施,改善城市的空气质量。

  3. 为政策制定提供依据:分析空气污染对健康的影响,可以为政府和公共卫生机构提供决策依据,帮助制定有效的环保政策和健康保护措施,尤其是对高风险人群的保护。

  4. 推动健康和环保技术的发展:本研究的数据和结论可以为空气净化技术、健康监测工具等相关技术的发展提供依据和方向,推动相关行业创新。

三、实证分析

读取数据集,查看前五行:

该数据集提供了与美国主要城市的城市空气质量及其潜在健康影响相关的广泛合成数据集合。数据已得到扩展,包括广泛的特征,使其成为环境科学、公共卫生和城市研究领域研究和分析的宝贵资源。

代码和数据集

import locale
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号
import plotly.graph_objects as go
import plotly.offline as pyo 
import plotly.io as pio

from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_squared_error, r2_score



import warnings
warnings.filterwarnings('ignore')

 查看数据集结构

##查看数据集结构
def summary(df):
    print(f'data shape: {df.shape}')
    summ = pd.DataFrame(df.dtypes, columns=['Data Type'])
    summ['Missing#'] = df.isna().sum()
    summ['Missing%'] = (df.isna().sum())/len(df)
    summ['Dups'] = df.duplicated().sum()
    summ['Uniques'] = df.nunique().values
    summ['Count'] = df.count().values
    desc = pd.DataFrame(df.describe(include='all').transpose())
    summ['Min'] = desc['min'].values
    summ['Max'] = desc['max'].values
    summ['Average'] = desc['mean'].values
    summ['Standard Deviation'] = desc['std'].values
    summ['First Value'] = df.loc[0].values
    summ['Second Value'] = df.loc[1].values
    summ['Third Value'] = df.loc[2].values

    display(summ)

summary(df)

发现存在 Missing data 和 No Duplicates 数据。

这里排除只有 1 种数据类型和/或非常大百分比的 null 数据的列。 

接下来进行数据性探索分析:

ax = sns.distplot(df['Health_Risk_Score'])
ax.figure.set_size_inches(12, 6)
ax.set_title('频率分布 - Health_Risk_Score', fontsize=20, color = "blue")
ax.set_ylabel('Health_Risk_Score', fontsize=11)
plt.show()

 Health_Risk_Score x 前 10 名城市的平均值

Health_Risk_Score x 前 10 名城市的平均值

df_cat = df.groupby('City')[["tempmin", "temp", "tempmax"]].mean().reset_index()
#df_cat = df_cat.sort_values(by='temp', ascending=False).head(10)

# 创建条形图
fig, ax = plt.subplots(figsize=(8, 5))
ax = sns.barplot(x = 'City', y = "temp", data = df_cat, palette = 'cool', label = "temp")
ax = sns.lineplot(x = 'City', y = "tempmax", data = df_cat, label = "tempmax")
ax = sns.lineplot(x = 'City', y = "tempmin", data = df_cat, label = "tempmin")

plt.title("温度平均值 vs 前 10 名城市", fontsize = 16)
plt.xticks(rotation=45, fontsize = 10)

与 Health_Risk_Score 的相关性

limite = -1

data = df.corr()["Health_Risk_Score"].sort_values(ascending=False)
indices = data.index
labels = []
corr = []
for i in range(1, len(indices)):
    if data[indices[i]]>limite:
        labels.append(indices[i])
        corr.append(data[i])
sns.barplot(x=corr, y=labels, palette = 'cool')
plt.title('特征与Health_Risk_Score之间的关联')
plt.show()

准备数据进行建模

X = df.drop(['Health_Risk_Score'], axis=1)
y = df['Health_Risk_Score']  

# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义模型
rf = RandomForestRegressor()
#定义参数网格
param_grid = {
    'n_estimators': [100, 200, 300],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4]
}

# 执行网格搜索
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=3, n_jobs=-1, verbose=2)
grid_search.fit(X_train, y_train)

# 进行预测
best_rf = grid_search.best_estimator_
y_pred = best_rf.predict(X_test)

# 模型评价
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

 # 计算残差
residuals = y_test - y_pred

# 图残差
plt.figure(figsize=(12, 6))
sns.histplot(residuals, kde=True, bins=30)
plt.title('残差分布')
plt.xlabel('Residual')
plt.ylabel('Frequency')
plt.show()

 

四、研究结论

根据本次研究的实证分析,我们得出以下主要结论:

  1. 空气质量对健康风险有显著影响:通过对美国主要城市的空气质量与健康风险得分(Health Risk Score)的分析,发现空气中的污染物与居民健康风险之间存在显著的正相关性。这意味着空气污染越严重的地区,居民的健康风险得分越高。

  2. 不同城市的健康风险差异较大:研究显示,某些大城市的平均健康风险得分显著高于其他城市,这可能与城市的工业化水平、车辆排放、人口密度等多种因素相关。温度、湿度等气候因素也可能对空气污染程度和健康风险产生影响。

  3. 健康风险与多种特征相关:通过相关性分析,我们发现影响健康风险的特征不局限于单一的污染物,还包括温度、湿度等多个环境因素。这表明在进行空气质量改善时,需综合考虑多种环境因素,而非仅限于单一污染物的治理。

  4. 随机森林模型表现良好:本研究使用随机森林模型对健康风险得分进行预测,结果显示该模型在预测健康风险方面表现较好,具有较高的预测精度。这为未来进一步通过机器学习方法预测和分析空气质量与健康风险的关系提供了有力支持。

  5. 残差分析表明模型适用性强:残差分布图表明,模型在不同数据样本上的误差较为均匀,未出现显著的系统偏差,验证了模型的稳定性与准确性。

总的来说,本研究为探索空气质量与健康影响之间的复杂关系提供了有力的实证支持,并通过机器学习方法进一步量化了这种关系。未来可以进一步探索更精细的污染物分布和具体健康影响之间的因果关系,为政策制定和公众健康保护提供更全面的科学依据。


http://www.kler.cn/news/340360.html

相关文章:

  • node高版本报错: digital envelope routines::unsupported
  • MySQL,多条件分页查询语句
  • swift使用代码结构解析
  • CNN+Transformer解说
  • 探讨最好用的AI工具:从日常到创新的应用
  • Linux内核 -- 使用 `proc_create_seq` 和 `seq_operations` 快速创建 /proc 文件
  • [C++ 核心编程]笔记 3 引用做函数参数
  • Web前端入门
  • 手机 电脑 Pad 是如何得到IP地址的呢? 如何让你的设备自动获取IP地址?DHCP :给你 IP 地址的隐形人
  • Qt-窗口布局按钮输入类
  • 基于Springboot+Vue的服装生产管理信息系统设计与实现(含源码数据库)
  • Java 实现 Feed 流实时更新数据的设计与实现
  • FLORR.IO画廊(3)
  • 产品需求文档PRD
  • 【黑马软件测试三】web功能测试、抓包
  • 学习记录:js算法(五十二):验证二叉搜索树
  • 基于IDEA+SpringBoot+Vue+Uniapp的投票评选小程序系统的详细设计和实现
  • 使用winsock和ip相关指令重置Window网络配置
  • golang的context
  • 【计网】【计网】从零开始学习http协议 ---理解http重定向和请求方法