標籤:matlab 大資料
一:起因
(1)最近一直在處理大資料,從MB ----> GB的變化,是一次質的飛躍,相應的工具也在變 從widows到linux,從單機單核 到 hadoop多節點的計算
(2)問題來了,面對海量的資料,如何從中挖掘實用的資訊或者發現潛在的現象,視覺化檢視可能是必不可少的 ;
(3)視覺化檢視可以說百度一大篇,可是作為研究者的我們,程式猿的我們可能更希望能夠抽象出一種數學模型,對現實的現象進行非常好的描述和刻畫
(4)Python(資料清洗和處理) + MATLAB(模型分析) 或 c++/java/hadoop(資料清洗和處理) + MATLAB(模型分析)
(5)先前的一篇博文可以參考 c++ fstream + string 處理大資料 以及 大資料處理之道 (MATLAB 篇(二))
(6)程式猿鄙視學習MATLAB的人,是因為對MATLAB的理解不夠深入,MATLAB是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室);說起處理矩陣(其實就是數值型的數組嘛)計算問題那是首屈一指的快,簡便。MATLAB可以進行矩陣運算、繪製函數和資料、實現演算法、建立使用者介面、串連其他程式設計語言的程式等。
二:MATLAB學習(遍曆檔案夾,矩陣的重新組合,pca)
(1) save(tofilename, ‘ANS‘, ‘-ASCII‘) 儲存結果ANS矩陣到制定路徑tofilename中
(2)num2str(num) 將數字轉化為string型;
(3)strcat(rootpath,num2str(i),‘\*.csv‘) 字串拼接函數 用於絕對路徑的產生
(4)[coef,score,latent,t2] = princomp(data); 主要成分分析法,latent是貢獻率排序的(從大到小),score是產生的新資料,根據貢獻率排序的
三:PCA講解
(1)特徵抽取是指將高緯度的特徵經過某個函數映射至低緯度作為新的特徵。常用的特徵抽取方法就是PCA
(2)當貢獻率累加至95%(當要求不是特別嚴格時,85%以上也可以),以後的維數會不再顯示;所以根據貢獻率(例如前兩位已經到達95%),那麼最後可以降至2維,即可以只選取SCORE的前兩列來表示未經處理資料。
(3)PCA演算法步驟:
設有m條n維資料。
1)將未經處理資料按列組成n行m列矩陣X
2)將X的每一行(代表一個屬性欄位)進行零均值化,即減去這一行的均值
3)求出共變數矩陣C=\frac{1}{m}XX^\mathsf{T}
4)求出共變數矩陣的特徵值及對應的特徵向量
5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P
6)Y=PX即為降維到k維後的資料
四:程式(注釋比較詳細)
clc;clear all;close all;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for i=1:7 %源檔案夾路徑 rootpath = 'G:\zyp_thanks\metro_test\resultMergeODByDay_6\'; %輸出路徑 torootpath = 'G:\zyp_thanks\metro_test\resultMergeODByDay_6_zhengyu\'; %源檔案夾路徑(擷取指定類型的檔案) path = strcat(rootpath,num2str(i),'\*.csv'); %輸出路徑 topath = strcat(torootpath,num2str(i),'\'); %建立輸出檔案夾 mkdir(topath); dirs=dir(path); % 替換成你想要的路徑。讀取某個目錄的指定類型檔案清單,返回結構數組。 dataDir=strcat(rootpath,num2str(i),'\');%資料目錄 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dircell=struct2cell(dirs)'; % 結構體(struct)轉換成元胞類型(cell),轉置一下是讓檔案名稱按列排列。 filenames=dircell(:,1); % 第一列是檔案名稱 [m n] = size(filenames); for i=1:m strfilename = [dataDir filenames{i}]; tofilename = [topath filenames{i}]; %fprintf('檔案%d:%s\n',i,strfilename); X = load(strfilename); %A,B是擷取的不需要改變的資料,下面作為合并用的 A = X(:,1:2); B = X(:,6:7); %擷取三維向量,用作pca變換 data = X(:,3:5); %pca [coef,score,latent,t2] = princomp(data); newdata = score(:,1:2);%前 2列 ANS = [A newdata B]; save(tofilename, 'ANS', '-ASCII') endend
大資料處理之道 (MATLAB 篇<三>)