【科学计算与数学建模】线性回归预测PM2.5值之数据处理

任务描述

本关任务:读取并认识PM2.5的数据并完成数据处理。

相关知识

为了完成本关任务,你需要掌握:1.数据的读取与处理。

PM2.5数据的基本认识

,

首先,我们来了解一下我们的数据,从而进一步明确任务,并作出针对性的分析。本次作业是使用某监控站的观测记录,分成train set 以及 test set,train set 是该站每个月前20天的所有资料,test set 是从该站剩下的资料中取样出来。即:

  • Train.csv每个月前20天的完整资料。
  • Test.csv从剩下资料中取样出连续的10小时为1笔数据,前9小时所有的观测数据当做feature,第10小时的PM2.5 当做answer,一共可以取出240笔不重复的test data,请根据feature预测这些240笔的PM2.5.

所有训练和测试的Data中含有18项污染物的观测数据AMB_TEMP, CH4, CO, NHMC, NO, NO2, NOx, O3, PM10, PM2.5, RAINFALL, RH, SO2, THC, WD_HR, WIND_DIREC, WIND_SPEED, WS_HR。
下图为训练数据的展示:


下面我们进行数据的读取,学习数据的基本使用:

 
  1. import sys
  2. import csv
  3. import numpy as np
  4. import pandas as pd
  5. import math
  6. import random
  7. data = []
  8. # 每一个维度处理一种污染物
  9. for i in range(18):
  10. data.append([])
  11. n_row = 0
  12. text = open('', 'r', encoding='big5') #big5是针对于文档中存在繁体字的编码
  13. row = csv.reader(text , delimiter = ",")
  14. print(row)
  15. for r in row:
  16. # 第0行沒有信息
  17. if n_row > 0:
  18. # 每一行只有第3-27格有值(即一天中24小时)
  19. for i in range(3,27):
  20. if r[i] != "NR":#其中有一个污染物全部值为‘NR’
  21. data[(n_row-1)%18].append(float(r[i]))
  22. else:
  23. data[(n_row-1)%18].append(float(0))
  24. n_row = n_row+1
  25. text.close()
对数据进行基本处理

原始数据一般不符合我们直接进行模型学习的形式,因此我们需要对数据进行一定的处理,从而满足需要。在这个数据我们的训练数据需要被处理成类似下图所示向量:

,


所以共12个月每个月20天的数据总共可以被处理为:

,


由于要test数据中是通过前9小时数据来预测第10小时数据。因此我们训练数据训练时也是按照该采样方法训练模型。可知每月共有480小时数据,其中每10小时为为1笔训练资料,那么一个月就是一共有471笔的训练资料。
另外,我们的预测对象为PM2.5的第10个数据。但是需要用到所有18类污染物的前9个数据。因此对于每一笔数据train_x是(189=162)1维,train_y是1*1。 加入偏置的方法可以在规整化之后的数据中的第一列都加入一个常量1即可,如: x = np.concatenate((np.ones((x.shape[0],1)),x), axis=1)
下面我们看具体的处理过程:

 
  1. x = []#特征
  2. y = []#标签
  3. # 共有12个月
  4. for i in range(12):
  5. # 每个月共有480列数据,连取10小时的分组可有471组。
  6. for j in range(471):
  7. x.append([])
  8. # 共有18种污染物
  9. for t in range(18):#把18行合成同一行
  10. # 取前9小时为feature
  11. for s in range(9):
  12. x[471*i+j].append(data[t][480*i+j+s] )
  13. y.append(data[9][480*i+j+9])#取PM2.5的标签
  14. # 在第一列添加一列1
  15. x = np.concatenate((np.ones((x.shape[0],1)),x), axis=1)

编程要求

完成右侧相关代码,对PM2.5的数据进行基本处理。

测试说明


开始你的任务吧,祝你成功!

代码部分

import sys
import csv
import numpy as np
import pandas as pd
import math 
import random
data = []
# 每一个维度处理一种污染物
for i in range(18):
    data.append([])
# 读取数据
n_row = 0
text = open('/data/bigfiles/ab410c80-7695-4be3-9d57-b2c36fab9218',  'r',errors="ignore", encoding='big5')  #big5是针对于文档中存在繁体字的编码
row = csv.reader(text , delimiter = ",")
######Begin######
# 将数据存储到data变量中
for r in row:
    if n_row > 0:
        for i in range(3,27):
            if r[i] != "NR":#其中有一个污染物全部值为‘NR’
                data[(n_row-1)%18].append(float(r[i]))
            else:
                data[(n_row-1)%18].append(float(0))
    n_row = n_row+1
text.close()

# 进行数据的处理和规整
x = []#特征
y = []#标签
# 共有12个月
for i in range(12):
    # 每个月共有480列数据,连取10小时的分组可有471组。
    for j in range(471):
        x.append([])
        # 共有18种污染物
        for t in range(18):#把18行合成同一行
            # 取前9小时为feature
            for s in range(9):
                x[471*i+j].append(data[t][480*i+j+s] )
        y.append(data[9][480*i+j+9])#取PM2.5的标签

#在第一列添加一列1
x = np.array(x)
x = np.concatenate((np.ones((x.shape[0],1)),x), axis=1)

######End######
# 打印处理过后数据的基本信息
print("x shape: ", x.shape)

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值