用pandas、numpy对csv数据取均值和归一化
(注:本文利用的是一个公开的用于室内定位的数据库,再上一篇blog中已经从原始数据提取出要用的特征列,今天利用提取好的数据进行下一步的数据处理工作)
1.导入模块,读取数据
import pandas as pd
import numpy as np
file = pd.read_csv('H:/Ex 1.5.csv', index_col=False, header=0, chunksize=10, iterator=True, usecols=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20))
**
导入模块,将之前处理好的数据去掉列名,行索引读取
chunksize=10
因为数据量比较大,而且根据论文提供的方法,需读取连续10s的数据,即我们10行为一个chunk分块读取2410行数据,总计241chunk块
2.取均值
for chunk in file:
c_a = chunk.mean(axis=0) # 取均值
利用for循环,按分好的chunk块取,即执行241次,连续读取241个chunk块数据
mean(axis=0):跨行求均值 其中axis = 0 是跨行,axis = 1 是跨列 这里容易弄错
**
输入的chunk块:
输出:
均值就这样求出来了,10×20的数据得到了1×20的数据
3.数据归一化
数据归一化公式:
c_norm = (c_a-c_a.min())/(c_a.max()-c_a.min()) # 归一化
c_norm.to_csv('c_norm.csv', mode='a', index=False, header=0)
这里的mode = ‘a’ :是累进输出,即每循环一次,输出的csv中多一个chunk数据(多20行)
输出:
这样将得到了归一化后的数据,最终的得到4820×1的数据,并输出成csv文件,很明显这里Ex 1.5的值为1,因为这个原始数据就是再Ex1.5测得的,总共20个AP,基本上取均值后的Ex1.5 的值,大多数值都为1,或者接近1,说明均值归一化处理结果正确。
整理数据:
之前处理好的数据是一个4820×1 的数据,现在先读取csv,再用np的reshape方法把他转换成241×20的数据,便于后期使用
b_arr = np.array(pd.read_csv('c_norm.csv', header=None)) # 将一列数据转换成array数组
b_gray_b = b_arr.reshape(241, 20) # 4820*1 reshape 241*20
输入:
将一个4820×1 的数据,用np的reshape方法把他转换成241×20的数据
输出:
到这里数据预处理工作告一段落,之后就是学习Pytorch(虽然我还没开始学),将处理好的数据用于训练、测试等下一步操作。
(PS:上面的图片都是用pycharm的debug调试界面截图,先在代码行标旁左击加断点,再点右上角debug(绿色小虫),再点左下的step over,点开右侧的变量,一步一步观察变化。)