当前位置:   article > 正文

dataframe数据标准化处理_pandas用法及数据预处理实例

standardscaler dataframe

1、pandas常用命令

数据的导入及结构查看:

  1. import numpy as np
  2. import pandas as pd
  3. path='train.txt' #将下载的原始数据放到项目文件夹,即可不用写路径
  4. data=pd.read_csv(path,sep=" +",header=None, engine='python') #具体参数可查看官方文档
  5. 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列的数据折线图、直方图:

  1. data[0].plot() #折线图
  2. data[0].hist() #直方图

将第0行第0列的元素替换为10:

data.loc[0,0] = 10

获取每列的缺失值个数:

n_missings_each_col = data.apply(lambda x: x.isnull().sum())

获取第一列的种类、每个种类的个数:

  1. print(n_missings_each_col.head())
  2. print(data[0].value_counts())

2、数据转存

将数据按列拆分并存储到不同的csv文件中:

  1. 转存数据
  2. def save(data, name):
  3. data.to_csv(name+ ".csv")
  4. # 将第一列按不同类保存到不同的表中
  5. new_data=[]
  6. for i in range(219): #测试数据中有219个设备数据,将每个设备数据单独存储
  7. new_data = data[data[0]==i]
  8. save(new_data, str(i))

文件批量删除小技巧:

(1)删除文件夹中所有.csv文件

  1. path = '文件路径'
  2. import os
  3. import glob
  4. for infile in glob.glob(os.path.join(path, '*.csv')):
  5. os.remove(infile)
  6. print(infile)

(2)删除连续的文件,比如删除文件夹0-218.csv共218个文件

  1. import os
  2. for i in range(0,218):
  3. excel_path = r"F:pycharm programVAE{}.csv".format(i)
  4. os.remove(excel_path)
  5. print(excel_path)

3、聚类分析

测试数据为单个设备的操作状态数据和监测数据,具体格式如下,第2-3列代表操作状态数据,第5-25列代表监测数据。先将数据按照操作状态进行聚类,接着对每种聚类结果的数据进行归一化处理。

97ee0e5904df4904b5bb2d1d6bc19058.png
测试数据明细
  1. from sklearn.cluster import KMeans
  2. #对第i设备进行聚类
  3. def cluster(path, n): #path为文件路径, n为聚类数量
  4. data1 = pd.read_csv(path, sep=",", index_col=0, engine='python')
  5. input = data1.values[:, 2:5] #将输入数据的3-5列作为聚类输入数据
  6. clf = KMeans(n_clusters=n, max_iter=300, n_init=10)
  7. y = clf.fit(input) #初始化分类器
  8. o = clf.cluster_centers_ #样本中心
  9. lab = clf.labels_ #样本标签
  10. score = clf.inertia_ #距离,越小聚类结果越好
  11. print("初始化分类器", y)
  12. print("样本中心", o.shape)
  13. print("距离", score)
  14. print("样本标签大小", lab.shape)
  15. print("样本标签", lab)
  16. data2 = data1.values[:, 5:] #从输入数据的第5列取值,过滤掉聚类数据
  17. result = np.insert(data2, 0, values=lab, axis=1) # 将分类结果插入第一列
  18. order = np.arange(0, 223, dtype=np.int) #为聚类数据加上顺序
  19. cluster_result = np.insert(result, 0, values=order, axis=1) #将第一列设为数据顺序
  20. cluster_result = pd.DataFrame(cluster_result) #聚类后的数据转换为Dataframe型
  21. print("聚类数据result_oldr", cluster_result.shape)
  22. return cluster_result #聚类结果

4、数据标准化

将上述聚类后的数据作为标准化数据的输入,根据不同的聚类结果对数据进行标准化

  1. from sklearn import preprocessing
  2. #数据标准化
  3. def scaler(data, n): #data为输入数据,n为数据的类别
  4. z_result = pd.DataFrame() #定义一个空的dataframe
  5. z_scaler = preprocessing.StandardScaler() # 建立 StandardScaler 对象
  6. for i in range(n):
  7. new_data = data[data[1] == i] #取不同类别的数据
  8. z_data = z_scaler.fit_transform(new_data.values[:, 2:]) #数据标准化(从第三列开始)
  9. z_data = pd.DataFrame(z_data) #将数据转为Dataframe
  10. older_data = pd.DataFrame(new_data.values[:, 0:2]) #取出数据的顺序和聚类结果
  11. z_data = pd.concat([z_data, older_data], axis=1, join_axes=[z_data.index]) #将数据的顺序和类别插入到后两行
  12. z_result = z_result.append(z_data) #按种类汇总标准化后的数据
  13. z_result.columns = list(range(23)) #更改列名
  14. z_result = z_result.rename({21: 'older', 22: 'cat'}, axis='columns') #更改列名
  15. return z_result

5、数据处理的结果

将原始数据和处理后的数据分别进行部分展示,可以观察到原始数据是杂乱无章的,处理后的数据可以呈现一定的规律性,可以用于后续的研究中。该数据处理流程还应包括缺失值、异常值处理、滤波等操作,后续会继续进行改进研究。

  1. from matplotlib.font_manager import FontProperties #字体设置
  2. font_set = FontProperties(fname=r"c:windowsfontssimsun.ttc", size=15) #字体设置
  3. path = '单个设备的数据路径'
  4. cluster_result = cluster(path, 6) #聚类
  5. z_result = scaler(cluster_result, 6) #按聚类结果进行标准化
  6. result = z_result.sort_values(by="older", ascending=True) #按照时间进行排序
  7. data1 = pd.read_csv(path, sep=",", index_col=0, engine='python')
  8. plt.subplot(2, 1, 1)
  9. plt.title("处理前设备1某个监测数据", fontproperties=font_set)
  10. plt.plot(range(0, 223, 1), data1.values[:, 6])
  11. plt.subplot(2, 1, 2)
  12. plt.title("处理后设备1某个监测数据", fontproperties=font_set)
  13. plt.plot(range(0, 223, 1), result.values[:, 1])
  14. plt.show()

结果展示如下:

b0f8ce4443807e22941e840810cf084b.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/148175
推荐阅读
相关标签
  

闽ICP备14008679号