气温数据构建模型

气温预测

通过前天,昨天,和历史上这一天的最高温度,和今天实际的最高温低来进行回归模型的建立

先导包

1
2
3
4
5
6
7
8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch
import torch.optim as optim
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline

读取一下数据

1
2
3
4
features = pd.read_csv("data/temps.csv")

# 展示一下数据
features.head()
year month day week temp_2 temp_1 average actual friend
0 2016 1 1 Fri 45 45 45.6 45 29
1 2016 1 2 Sat 44 45 45.7 44 61
2 2016 1 3 Sun 45 44 45.8 41 56
3 2016 1 4 Mon 44 41 45.9 40 53
4 2016 1 5 Tues 41 40 46.0 44 41

数据表中

  • year,moth,day,week分别表示的具体的时间
  • temp_2:前天的最高温度值
  • temp_1:昨天的最高温度值
  • average:在历史中,每年这一天的平均最高温度值
  • actual:这就是我们的标签值了,当天的真实最高温度
  • friend:这一列可能是凑热闹的,你的朋友猜测的可能值,咱们不管它就好了

处理时间数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 处理时间数据
import datetime

# 分别得到年月日
years = features["year"]
months = features["month"]
days = features["day"]

# datetime格式
dates = [str(int(year)) + "-" + str(int(month)) + "-" + str(int(day)) for year, month, day in zip(years, months, days)]
dates = [datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]

print(dates[:5])
#[datetime.datetime(2016, 1, 1, 0, 0),
# datetime.datetime(2016, 1, 2, 0, 0),
# datetime.datetime(2016, 1, 3, 0, 0),
# datetime.datetime(2016, 1, 4, 0, 0),
# datetime.datetime(2016, 1, 5, 0, 0)]

展示数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 准备画图
# 指定默认风格
plt.style.use("fivethirtyeight")

# 设置布局
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows = 2, ncols=2, figsize=(10, 10))
fig.autofmt_xdate(rotation = 45)

# 标签值
ax1.plot(dates,features["actual"])
ax1.set_xlabel(""); ax1.set_ylabel("Temperature"); ax1.set_title("Max Temp")

# 昨天
ax2.plot(dates,features["temp_1"])
ax2.set_xlabel(""); ax2.set_ylabel("Temperature"); ax2.set_title("Previous Max Temp")

# 前天
ax3.plot(dates,features["temp_2"])
ax3.set_xlabel("Date"); ax3.set_ylabel("Temperature"); ax3.set_title("Two Days Prior Max Temp")

# 朋友
ax4.plot(dates, features["friend"])
ax4.set_xlabel("Date"); ax4.set_ylabel("Temperature"); ax4.set_title("Friend Estimate")

plt.tight_layout(pad=2)

image-20220712114441385

使用get_dummies(features) 函数来进行星期转换

1
2
3
4
# 独热编码
# 将字符串代表的数字转换成对应的数字,例如上面表格中的星期那一栏
features = pd.get_dummies(features)
features.head(5)