2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题二python代码实现

简介: 本文提供了2022年APMCM亚太数学建模竞赛C题"全球是否变暖"问题二的Python代码实现,涉及经纬度与气温关系的分析、多元线性回归建模以及气温时间序列的季节性分解和平稳性检验。

在这里插入图片描述

更新信息

2022-11-24 10:00 更新问题1和问题2 思路

2022-11-24 23:20 更新问题一代码

2022-11-25 11:00 更新问题二代码

相关链接

【2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题一python代码实现】

【2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题二python代码实现】

【2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 27页论文及代码】

27页论文:
方法一:https://www.betterbench.top/#/20/detail
方法二:私信我

1 分析经纬度与气温的关系

import pandas as pd

data = pd.read_csv('*.csv')
data.head(10)

在这里插入图片描述

只选择2013年全球的平均气温来分析

data['dt'] = pd.to_datetime(data['dt'])
data.index = data['dt']
data['Year'] = data['dt'].dt.year
data_2013 = data[data['Year']==2013][['AverageTemperature','City','Latitude','Longitude']]
data_2013

在这里插入图片描述

北纬和南纬,东经和西经,分别用正负表示

def clear_Latitude(s):
    if 'N' in s:
        return float(s.replace('N',''))
    else:
        return -float(s.replace('S',''))
def clear_Longitude(s):
    if 'E' in s:
        return float(s.replace('E',''))
    else:
        return -float(s.replace('W',''))
data_2013['Latitude'] = data_2013['Latitude'].apply(clear_Latitude)
data_2013['Longitude'] = data_2013['Longitude'].apply(clear_Longitude)
data_2013

在这里插入图片描述

按城市分组

city_data_df = data_2013.groupby('City').mean()
city_data_df

在这里插入图片描述

分析经纬度与温度的相关性


import matplotlib.pyplot as plt
import seaborn as sns 
f, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8))
df = city_data_df
shifted_cols = df.columns
corrmat = df[shifted_cols].corr()

sns.heatmap(corrmat, annot=True, vmin=-1, vmax=1, cmap='coolwarm_r')
ax.set_title('经纬度与温度的全年平均气温相关性', fontsize=16)
plt.tight_layout()
plt.savefig('问题二/img/经纬度与温度的全年平均气温相关性.png',dpi=300, bbox_inches = 'tight')
plt.show()

在这里插入图片描述

多元线性回归

# from statsmodels.formula.api import ols
import statsmodels.api as sm


Y= city_data_df['AverageTemperature']
X1 = city_data_df.drop(columns=['AverageTemperature'])
X= sm.add_constant(X1)
result = sm.OLS(Y,X).fit()
result.summary()

在这里插入图片描述

重点关注几个参数

  • R-squared(R方):该值说明了方程的拟合好坏,R平方=0.80非常不错了,说明:

1)总体满意度的80%的变差都可以由7个分项指标解释,或者说,7个分项指标可以解释总体满意度80%的变差!

2)R平方如果太大,大家不要高兴太早,社会科学很少有那么完美的预测或解释,一定存在了共线性!

  • p>|t|:说明发生了小概率事件,拒绝原假设。可以看到都是0,说明不拒绝原假设。原假设是平均气温与经纬度存在多元线性相关。

  • coef是系数:说明多元性线性回归方程式 AverageTemperature = (-0.1402)*Latitude+(0.0156)*Longitude +22.4135

2 分析气温与时间的关系

(1)获取北京的数据

China_data = pd.read_csv('clear_China_city_AvgTemperature.csv')
China_data.head(10)
China_data.index =pd.to_datetime(China_data['date'])
Beijing_data = China_data[China_data['City'] == 'Beijing']
import numpy as np
Beijing_data['AvgTemperature'][Beijing_data['AvgTemperature']<-18]=np.nan
# 使用垂直方向的向前填充去填充空值
Beijing_data = Beijing_data.fillna(method = 'ffill',axis=0)
Beijing_data.AvgTemperature.plot(figsize=(20, 5))
plt.xlabel('Average Temperature')
plt.title('Average Temperature in Beijing')
plt.savefig('问题二/img/北京历史气温.png',dpi=300, bbox_inches = 'tight')
plt.show()

在这里插入图片描述

(2)季节性分解

from statsmodels.tsa.seasonal import seasonal_decompose
# 由于我们处理的是持续数年的每日数据,我们可以认为季节性成分每 365 天重复一次,因此我们将周期设置为 365。
decomposition = seasonal_decompose(Beijing_data['AvgTemperature'], model='additive', period=365, extrapolate_trend='freq')
fig, axs = plt.subplots(4, figsize=(12, 6))
fig.suptitle('Time series decomposition')
decomposition.observed.plot(ax=axs[0])
decomposition.trend.plot(ax=axs[1])
decomposition.seasonal.plot(ax=axs[2])
decomposition.resid.plot(ax=axs[3])
axs[0].set_ylabel('Observed')
axs[1].set_ylabel('Trend')
axs[2].set_ylabel('Seasonal')
axs[3].set_ylabel('Residual')
plt.subplots_adjust( hspace=1 )
plt.savefig('问题二/img/季节性分解.png',dpi=300, bbox_inches = 'tight')

在这里插入图片描述

我们应该验证残差是白噪声(其要求与平稳性的要求一致)。 我们可以使用 Augmented Dickey-Fuller Test 来检查平稳性。

from statsmodels.tsa.stattools import adfuller
adf_test = adfuller(decomposition.resid)
print(f"p-value = {adf_test[1]}")
# p-value = 2.5687430940547997e-17

得到的 p 值接近0.0,低于我们的显着性水平 (0.05)。 因此,我们可以拒绝零假设(H₀:时间序列是非平稳的),这对我们来说意味着我们的时间序列可以被认为是白噪声。

目录
相关文章
|
17天前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
|
15天前
|
程序员 测试技术 开发者
Python装饰器:简化代码的强大工具
Python装饰器:简化代码的强大工具
139 92
|
16天前
|
运维 算法 新能源
基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
|
17天前
|
机器学习/深度学习 算法 调度
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
|
6月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
200 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
75 1
|
3月前
|
设计模式 安全 Python
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
130 2
|
4月前
|
数据采集 安全 BI
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
112 11

热门文章

最新文章

推荐镜像

更多