请执行以下命令下载样本数据
数据为CSV表格有8列,其中abstime列为时间列,其余列为特征列
!wget http://82.156.209.173/s/dHCnaH32rtZdxcs/download
!mv download sample_data_A100159.csv
1. 对给出的样本文件中的所有特征列做normalization,映射至(0-255)的区间,从abstime的第一行开始每隔200条取一次整行数据,并将最终取出的数据并以PNG格式的图片输出。
提示:输出图片用PIL库
可参考 https://blog.youkuaiyun.com/qq_42967398/article/details/95388563
对于样本XN×KX_{N\times K}XN×K,共NNN个样本,KKK个特征。sample_data_A100159.csv的shape是(4905, 8)。所以有N=4905N=4905N=4905,K=8K=8K=8。
1)归一化是按照每个特征进行归一化。对于第kkk个特征,将数据归一化到[0,1]:X=X−XminXmax−XminX=\frac{X-X_{min}}{X_{max}-X_{min}}X=Xmax−XminX−Xmin2)对于第kkk个特征,将数据归一化到[0,255],令low=0,high=255low=0,high=255low=0,high=255:X=low+X−XminXmax−Xmin∗(high−low)X=low+\frac{X-X_{min}}{X_{max}-X_{min}}*(high-low)X=low+Xmax−XminX−Xmin∗(high−low)3)若第kkk个特征的值全部相同,那么Xmax−Xmin=0X_{max}-X_{min}=0Xmax−Xmin=0,分母为0,计算结果溢出,程序报错。令分母加一个小数(1e-5)。
4)numpy便于对N维数组对象进行整体的操作。比如有KKK列特征,不用循环KKK次进行归一化操作。数据是二维的,在第一维度上进行最大值最小值计算。第一维度是样本数量。data.min(axis=0)data.min(axis=0)data.min(axis=0)以及data.max(axis=0)data.max(axis=0)data.max(axis=0)两个操作。
import pandas as pd
import numpy as np
import random
from PIL import Image
#################################
# CODING HERE
sample_data = pd.read_csv("sample_data_A100159.csv",header = 0)
data = np.array(sample_data)
print(data.size) #39240
print(data.shape) #(4905, 8)
print(data.ndim) #2
print(data.dtype) #float64
#归一化
x_nor = (data - data.min(axis=0))/(data.max(axis=0)-data.min(axis=0)+1e-5)* (255.0-0.0)+0.0
#(某个元素-它这列最小的数)/(它这列最大的数-它这列最小的数)
print(x_nor.shape)
data = pd.DataFrame(x_nor)
data.to_csv("normalization_A100159.csv",index=False,header=False)
abstime=data[:][6]
print(data[:][6])
ans = []
for i in range(0 , 4094 , 200):
ans.append(abstime[i])
print(len(ans))
#################################