Python 數據特徵提取

好久沒有寫博客了,好懷念這裏。自己的研究方向關於深度學習,數據挖掘,傳感器數據融合,室內定位技術,有興趣一起進步不斷學習的朋友們歡迎關注我,和我交流。在這裏簡單先說一下我處理數據的思路: (1)數據真實性判斷:可以通過excel來觀察數據的整體趨勢週期性波峯波谷,或者用利用擬合技術等手段實現數據的真實性的驗證。(2)數據異常值處理:對於NAN數據或者奇異點,可以採取基於拉依達準則的數據異常值處理。關於拉依達準則的原理,大家百度就可以了。我簡單說一下就是當樣本點的樣本偏差大於3倍標準差對該樣本點進行處理。(3)數據去噪平滑處理:爲了儘可能避免噪聲帶來的干擾,常用的除噪技術包括,滑動平均濾波,低通高通濾波,中值濾波,卡爾曼濾波,小波閾值濾波等。(4)數據分割:這一項常用的有基於滑動窗口,基於閾值檢測,模型匹配等。(5)數據特徵提取:分三類:時域特徵,頻域特徵,時頻域特徵。時域特徵包括:最大值,最小值,方差,標準差,RMSE,均值,熵等。頻域特徵包括:the output of FFT(bias coefficients),光譜分佈,FFT係數平方之和等。  時頻域特徵包括:小波分解,小波包分解重構等。

利用python實現大數據的特徵提取,matlab版見https://blog.csdn.net/Melo0705/article/details/80888803

# -*- coding: utf-8 -*-
"""
Created on Sun Mar  3 14:35:57 2019
@author: Melo琦
"""
import pandas as pd
import numpy as np
#Read data
Raw_data=pd.read_excel(r'C:\Users\201810\Desktop\機器學習數據集\1.xls',sheet_name='Sheet1',index_col=None)
Raw_data=Raw_data.values#取值,且轉化爲二維數組
data=np.array(Raw_data)#二維數組(矩陣) 這裏的np.array()是爲了下面使用numpy包,轉化爲nummpy數據標準 ,並不改變維度
(m,n)=Raw_data.shape #矩陣的行數m列數n,返回一個元組

def entropy(vector,segnment): #自定義一個求解信息熵的函數,vector爲向量,segment分段數值
    x_min=np.min(vector)
    x_max=np.max(vector)
    x_dis=np.abs(x_max-x_min)
    x_lower=x_min
    seg=1.0/segnment
    ternal=x_dis*seg
    list1=[]
    List1=[]
    #
    for i in range(len(vector)):
        if vector[i]>=x_lower+ternal:
            list1.append(vector[i])
    len_list1=len(list1)
    List1.append(len_list1)
    #
    for j in range(1,segnment):
        list1=[]
        for i in range(len(vector)):
            if vector[i]>=x_lower+j*ternal and vector[i]<x_lower+(j+1)*ternal:
                list1.append(vector[i])
        len_list1=len(list1)
        List1.append(len_list1)
    #
    list1=[]
    for i in range(len(vector)):
        if vector[i]>=x_lower+(segnment-1)*ternal :
            list1.append(vector[i])
    len_list1=len(list1)
    List1.append(len_list1)
    List1=List1/np.sum(List1) 
    
    y=0
    Y=[]
    for i in range(segnment):
        if List1[i]==0:
            y=0
            Y.append(y)
        else:
            y=-List1[i]*np.log2(List1[i]);
            Y.append(y)
    result=np.sum(Y) 
    return result
 
#數據預處理
data_feature=np.zeros(shape=(6,n)) #特徵二維數組(矩陣)的初始化 np.zeros(shape=(行,列))
for i in range(n):
    data_ave=np.mean(data[:,i])
    data_std=np.std(data[:,i],ddof=1)
    for j in range(1,m-1): #基於拉伊達準則的數據異常值處理
        if np.abs(data[j,i])>3*data_std:
            data[j,i]=0.5*(data[j-1][i]+data[j+1][i])
        else:
           continue
    data_ave=np.mean(data[:,i]) #均值
    data_std=np.std(data[:,i]) #標準差
    data_max=np.max(data[:,i]) #最大值
    data_min=np.min(data[:,i]) #最小值
    data_energy=np.sum(np.abs(data[:,i])) #能量:數據絕對值之和表示能量
    data_normal = (data[:,i]-data_min) / (data_max-data_min)#數據歸一化(0,1)
    segnment=int(0.5*m);
    data_etropy=entropy(data_normal,segnment)#信息熵
    data_feature[:,i]=[data_ave,data_std,data_max,data_min,data_energy,data_etropy]#特徵二維數組

#寫入數據
data_f = pd.DataFrame(data_feature)#寫入數據
data_f.columns = ['Ax','Ay','Az','Gx','Gy','Gz','Mx','My','Mz']#列標題
data_f.index = ['ave','std','max','min','energy','entropy']#行標題
writer = pd.ExcelWriter(r'C:\Users\201810\Desktop\機器學習數據集\f1.xls')#寫入路徑
data_f.to_excel(writer,'data_feature',float_format='%.2f') # data_feature爲sheet名,float_format 數值精度
writer.save()#保存
       
     
            

下面將對程序中的一些代碼和原理進行解釋:

本次python代碼實現的數據的時域特徵提取,包括均值,標準差,最大值,最小值,能量,信息熵。

其中主要依賴pandas 和 numpy 包實現一些特定的功能。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章