北京PM2.5浓度回归分析

姓名 学号
陈聪 20185109043
张一帆 20185109045
罗凯 20185110010
刘文博 20185109044

任务

由给定一段时间内的北京天气相关指数数据和北京PM2.5指数等,建立模型预测接下来一段时间内北京的PM2.5指数。

数据

数据主要包括2010年1月1日至2014年12月31日间北京pm2.5指数以及相关天气指数数据。
数据分为训练数据和测试数据,分别保存在pm25_train.csv和pm25_test.csv两个文件中。
其中训练数据主要包括35746条记录,13个字段,主要字段说明如下:
date:观测数据发生的日期(年-月-日)
hour:观测数据发生的时间点(时)
pm2.5:观测时间点对应的pm2.5指数((ug/m^3)
DEWP:露点,空气中水气含量达到饱和的气温(℃)
TEMP:温度,观测时间点对应的温度(℃)
PRES:压强,观测时间点对应的压强(hPa)
Iws:累积风速,观测时间点对应的累积风速(m/s)
Is:累计降雪,到观测时间点为止累计降雪的时长(小时)
Ir:累计降雨,到观测时间点为止累计降雨的时长(小时)cbwd_NE:观测时间点对应的风向为东北风(m/s)
cbwd_NW:观测时间点对应的风向为西北风(m/s)
cbwd_SE:观测时间点对应的风向为东南风(m/s)
cbwd_cv:观测时间点对应的风向为静风(m/s)

测试数据主要包括6011条记录,12个字段,测试数据的字段信息和训练数据相比,除了不包括pm2.5字段以外其他完全相同。学员需要通过所学的知识,利用训练数据建立回归模型,并用于预测测试数据相应的pm2.5指数。

核心代码

import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression  # 用于线性回归 
from sklearn.model_selection import train_test_split 

df = pd.read_csv('D:\game\pm2.5\北京PM2.5浓度回归分析训练赛\pm25_train.csv', engine='python')

查看数据发现日期格式是字符串格式

例如:“2019-01-01”,首先第一步操作要把字符串类型的日期,拆分成年、月、日、周几,之后再把这4个特征添加到数据表中。
def data_format(dt):

time_list = []
t = time.strptime(dt, '%Y-%m-%d')
time_list.append(t.tm_year)
time_list.append(t.tm_mon)
time_list.append(t.tm_mday)
time_list.append(t.tm_wday)
return time_list
date = df['date'].tolist()
jieguo = []
for dt in date:
    jieguo.append(data_format(dt=dt))

df_time = pd.DataFrame(jieguo)
df_time.columns=['year', 'mon', 'day','week']
df_data = pd.concat([df,df_time], axis=1)

接着进行模型训练和预测

y = df_data['pm2.5']
X = df_data.drop(columns=['pm2.5','date'])
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.3,random_state=42)
lr = LinearRegression().fit(X_train, y_train)

yuce = lr.predict(X_test)
df_jieguo = pd.DataFrame(y_test)
df_jieguo = df_jieguo.reset_index()
df_jieguo['yuce'] = yuc

最后计算的预测准确度情况

df_jieguo['wucha'] = pow((df_jieguo['yuce']-df_jieguo['pm2.5']), 2)
he = sum(df_jieguo['wucha'])
score = he/len(df_jieguo)

你可能感兴趣的:(数据挖掘大作业)