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₀:时间序列是非平稳的),这对我们来说意味着我们的时间序列可以被认为是白噪声。

目录
相关文章
|
22天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
2月前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
51 10
|
2月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
103 8
|
2月前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80
|
3月前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
171 59
|
2月前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
51 14

热门文章

最新文章