赞
踩
数据的导入及结构查看:
- import numpy as np
- import pandas as pd
- path='train.txt' #将下载的原始数据放到项目文件夹,即可不用写路径
- data=pd.read_csv(path,sep=" +",header=None, engine='python') #具体参数可查看官方文档
- print("原始数据data", data.shape,type(data)) #原始数据的结构
查看前十行第一列的值:
print(data.values[0:10, 0])
数据描述:每列的元素数、均值、标准差、最小值、25%、50%、75%分位数和最大值
print(data.describe())
前3行的值:
print(data.head(3))
第一行的值:
print(data.loc[1])
第一行第一列的值:
print(data.loc[1, 1])
第0列为1的所有行:
print(data[data[0]== 1])
第0列为1或2的所有行:
print(data[data[0].isin([1, 2])])
画出第0列的数据折线图、直方图:
- data[0].plot() #折线图
- data[0].hist() #直方图
将第0行第0列的元素替换为10:
data.loc[0,0] = 10
获取每列的缺失值个数:
n_missings_each_col = data.apply(lambda x: x.isnull().sum())
获取第一列的种类、每个种类的个数:
- print(n_missings_each_col.head())
- print(data[0].value_counts())
将数据按列拆分并存储到不同的csv文件中:
- 转存数据
- def save(data, name):
- data.to_csv(name+ ".csv")
- # 将第一列按不同类保存到不同的表中
- new_data=[]
- for i in range(219): #测试数据中有219个设备数据,将每个设备数据单独存储
- new_data = data[data[0]==i]
- save(new_data, str(i))
文件批量删除小技巧:
(1)删除文件夹中所有.csv文件
- path = '文件路径'
- import os
- import glob
- for infile in glob.glob(os.path.join(path, '*.csv')):
- os.remove(infile)
- print(infile)
(2)删除连续的文件,比如删除文件夹0-218.csv共218个文件
- import os
- for i in range(0,218):
- excel_path = r"F:pycharm programVAE{}.csv".format(i)
- os.remove(excel_path)
- print(excel_path)
测试数据为单个设备的操作状态数据和监测数据,具体格式如下,第2-3列代表操作状态数据,第5-25列代表监测数据。先将数据按照操作状态进行聚类,接着对每种聚类结果的数据进行归一化处理。
- from sklearn.cluster import KMeans
- #对第i设备进行聚类
- def cluster(path, n): #path为文件路径, n为聚类数量
- data1 = pd.read_csv(path, sep=",", index_col=0, engine='python')
- input = data1.values[:, 2:5] #将输入数据的3-5列作为聚类输入数据
- clf = KMeans(n_clusters=n, max_iter=300, n_init=10)
- y = clf.fit(input) #初始化分类器
- o = clf.cluster_centers_ #样本中心
- lab = clf.labels_ #样本标签
- score = clf.inertia_ #距离,越小聚类结果越好
- print("初始化分类器", y)
- print("样本中心", o.shape)
- print("距离", score)
- print("样本标签大小", lab.shape)
- print("样本标签", lab)
- data2 = data1.values[:, 5:] #从输入数据的第5列取值,过滤掉聚类数据
- result = np.insert(data2, 0, values=lab, axis=1) # 将分类结果插入第一列
- order = np.arange(0, 223, dtype=np.int) #为聚类数据加上顺序
- cluster_result = np.insert(result, 0, values=order, axis=1) #将第一列设为数据顺序
- cluster_result = pd.DataFrame(cluster_result) #聚类后的数据转换为Dataframe型
- print("聚类数据result_oldr", cluster_result.shape)
- return cluster_result #聚类结果
将上述聚类后的数据作为标准化数据的输入,根据不同的聚类结果对数据进行标准化
- from sklearn import preprocessing
- #数据标准化
- def scaler(data, n): #data为输入数据,n为数据的类别
- z_result = pd.DataFrame() #定义一个空的dataframe
- z_scaler = preprocessing.StandardScaler() # 建立 StandardScaler 对象
- for i in range(n):
- new_data = data[data[1] == i] #取不同类别的数据
- z_data = z_scaler.fit_transform(new_data.values[:, 2:]) #数据标准化(从第三列开始)
- z_data = pd.DataFrame(z_data) #将数据转为Dataframe
- older_data = pd.DataFrame(new_data.values[:, 0:2]) #取出数据的顺序和聚类结果
- z_data = pd.concat([z_data, older_data], axis=1, join_axes=[z_data.index]) #将数据的顺序和类别插入到后两行
- z_result = z_result.append(z_data) #按种类汇总标准化后的数据
- z_result.columns = list(range(23)) #更改列名
- z_result = z_result.rename({21: 'older', 22: 'cat'}, axis='columns') #更改列名
- return z_result
将原始数据和处理后的数据分别进行部分展示,可以观察到原始数据是杂乱无章的,处理后的数据可以呈现一定的规律性,可以用于后续的研究中。该数据处理流程还应包括缺失值、异常值处理、滤波等操作,后续会继续进行改进研究。
- from matplotlib.font_manager import FontProperties #字体设置
- font_set = FontProperties(fname=r"c:windowsfontssimsun.ttc", size=15) #字体设置
- path = '单个设备的数据路径'
- cluster_result = cluster(path, 6) #聚类
- z_result = scaler(cluster_result, 6) #按聚类结果进行标准化
- result = z_result.sort_values(by="older", ascending=True) #按照时间进行排序
- data1 = pd.read_csv(path, sep=",", index_col=0, engine='python')
- plt.subplot(2, 1, 1)
- plt.title("处理前设备1某个监测数据", fontproperties=font_set)
- plt.plot(range(0, 223, 1), data1.values[:, 6])
- plt.subplot(2, 1, 2)
- plt.title("处理后设备1某个监测数据", fontproperties=font_set)
- plt.plot(range(0, 223, 1), result.values[:, 1])
- plt.show()
结果展示如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。