歇工幾天,將最近所做的工作進行總結一下,首先進行PCA處理
完成目標:對一個文件下所有.csv文件進行PCA,得到5個主成分,並將其得到的結果另存一個文件下相應名字的.csv文件中
第一步:處理好的原始數據放在一個文件夾下,如下我的文件夾下包含三個.csv數據文件
第二步:程序批量處理
from sklearn.preprocessing import StandardScaler import pandas as pd from sklearn.decomposition import PCA from sklearn.cluster import k_means import csv import numpy as np import os def standard_pca_kmeans(file_path, n_component, k, save=True): # 讀取目標文件中相應的表 df = pd.read_csv(file_path, header=None) # 獲取需要進行處理的數據,保留第1列,並轉化為numpy數組 data_useful = np.array(df) data_useful=data_useful.T # 對數據進行標准化處理以進行PCA(相關陣法) scaler = StandardScaler().fit(data_useful) data_scaled = scaler.transform(data_useful) # 對數據進行PCA降維處理 pca = PCA(n_components=n_component).fit(data_scaled) data_pca = np.dot(pca.components_, data_scaled.T).T print('當選取%s個主成分時,累計方差貢獻率為%s' % (n_component, sum(pca.explained_variance_ratio_))) # 對降維后的數據進行聚類 kmeans = k_means(data_pca, k) lables = kmeans[1] # 整合成一個表 print(data_pca.shape) result = pd.DataFrame(data_pca, columns=['第%s主成分' % (i + 1) for i in range(n_component)]) if save: return result, data_pca, data_scaled #result.to_csv('C:\\Users\\Administrator\\Desktop\\mean\\PCAspon7結果.csv') if __name__ == '__main__': #批量讀取文件夾下的數據文件 def get_file(path): # 創建一個空列表 files = os.listdir(path) list1 = [] for file in files: if not os.path.isdir(path + file): # 判斷該文件是否是一個文件夾 f_name = str(file) # print(f_name) tr = '\\' # 多增加一個斜杠 filename = path + tr + f_name # filename = f_name list1.append(filename) # 得到所有 return list1#返回.csv文件路徑 f1 = get_file('C:\\Users\\Administrator\\Desktop\\yuanshispike') # 得到文件夾下所有數據文件的路徑 data = [] for file in f1: filename=os.path.basename(file)#截取文件名 result, data_pca, data_scaled = standard_pca_kmeans(file, 5, 3) meansignal = pd.DataFrame(data=result) datapath1 = 'C:\\Users\\Administrator\\Desktop\\combine\\' + filename#新建文件夾,將得到的結果保存在該路徑下 meansignal.to_csv(datapath1, index=True) # 進行數據的保存
輸出結果,主成分根據自己的數據自行定義,此時累計方差貢獻率已經很高了。
此時發現該文件夾下已經存在了相應名字的PCA數據結果了
文件中的結果如下所示
PCA被稱作是主成分分析,該算法的作用是將高維數據通過降維的方法轉換低維度進行數據處理,相當於在原始坐標軸基礎上對數據的點重新建立一個坐標軸,從而達到用更少的主要屬性來區分出數據的類別(僅是個人理解)詳細請看:https://blog.csdn.net/program_developer/article/details/80632779