matlab cell转double_MATLAB处理数据,掌握这7个小技巧就够了
最近一段時間,工作上花了不少時間用MATLAB處理工廠下線的數據,數據龐大不說,復雜度也高,各種推算和統計
所以今天我打算總結一下,平時我在用MATLAB做數據分析時常用的幾個小技巧
正好全國大學生數學建模競賽下周就要開始了,希望今天的分享對參賽的朋友有所幫助
雖然不知道到時候會有哪些選題,但是能肯定的是,不管是什么題目,都離不開數據分析,這是唯一比賽前能好好準備的
1. 數據類型的轉換
有一類問題,不論你MATLAB水平如何,平時寫代碼的時候多少總會遇到,就是數據類型不一致,需要轉換
至于什么是數據類型,這個問題我就不科普了,大家可以直接在MATLAB命令欄“doc 數據類型”
通常在數據轉換這個問題上,涉及到的比較常見幾種的數據類型有double,char,cell,struct
我給大家準備了一張數據類型轉換的關系圖,用class判斷一下轉換前的兩種數據類型,然后按照下面這張圖處理就完事了
2. 字符串的對比
第二個經常需要處理的問題是,字符串的對比
這里不單單指的是字符串,還包括cell元胞里面的字符串定位
如果單純只是字符串的話,要判斷兩個字符串是否相同,strcmp函數可以實現對比
strcmp('abc','abc')判斷字符串中是否包含某種字符串,可以使用contains函數
contains('abc','ab')判斷字符串中在哪幾位出現某種字符串,可以使用regexp函數
regexp('abac','a')更常碰到的場景是,在cell元胞里面判斷字符串,比如維度1x1000的cell中,定位哪幾個cell里面的字符串是‘abc’,還是通過strcmp實現對比,再通過find定位
a = strcmp(Cell_variable,'abc'); b = find(a == 1)同樣,要判斷這1x1000的cell中,定位哪幾個cell中的字符串,帶有‘ab’,可以使用contains函數,再用find定位
a = contains (Cell_variable,'ab'); b = find(a == 1)掌握上面這兩點,在平時處理cell的字符串,基本上就夠用了
3. 文件的讀取寫入
文件的讀取寫入同樣非常重要,在數據分析過程中,對應著信息的獲取和數據處理結果的輸出
mat, txt, excel是平時最常碰到的文件類型
mat就不用多說了,MATLAB中的一種文件類型,用于存儲workspace中的變量,在數據分析過程中,可以經常把運算結果或中間階段的數據,作為mat進行保存
加載mat文件,用的是“load 文件名”命令,也可以雙擊mat文件,保存mat文件,用的是“save 文件名”命令,也可以workspace右鍵保存
txt的讀取方式有非常多,網上也有各種各樣的介紹,我就介紹兩種最常用,也是目前我一直在用的兩種方法
第一種是通過importdata(‘test.txt’)命令,讀取的結果是一個多行一列的cell元胞,后續的數據處理也就方便了,cell里面的字符串定位處理在前面也已經介紹過
另一種方法是,通過MATLAB工具條里的“導入數據”按鈕,這種方法的一個好處是,導入過程中有很多非常人性化的設置,比如數據的分隔,范圍定義,數據的輸出類型等等
導出的選擇也有不少,可以選擇直接導出到workspace,也可以選擇生成腳本或者是function,方便同類型文本的重復使用,對于不太喜歡寫腳本導入數據的朋友,我比較推薦這種方式
txt的寫入,可以通過fopen,fprintf,fclose實現,基本上我所有GUI中關于代碼生成的功能,都是通過這個方式將代碼寫入m腳本的,給大家舉一個簡單的txt寫入的例子代碼
fid = fopen('test.txt','wt'); fprintf(fid,'test1n'); fprintf(fid,'test2n'); fclose(fid);關于txt的讀取寫入,我再多介紹一點,txt是文本文件中的一種,就是那種右鍵打開能讀得懂的文件。類似的文本文件還有很多,像m文件,mdl模型文件,dcm文件,c代碼等等,只要是文本文件,都可以用txt處理的方式,對目標文件進行讀取寫入。
最后講一下Excel讀取寫入的問題,常寫MATLAB腳本的朋友,對xlsread和xlswrite肯定不陌生,對應的是Excel的讀取和寫入
[num,txt,raw] = xlsread(filename,sheet,xlRange) xlswrite(filename,A,sheet,xlRange)但是目前MATLAB官方已經不推薦使用這兩種方式了,替代的函數是readtable和writetable
T = readtable(filename) writetable(T,filename)如果數據是cell元胞的話,替代的函數是readcell和writecell
T = readcell(filename) writecell(T,filename)大家根據自己的個人習慣選擇其中一種方式,兩種方式在功能實現上目前并沒有太大區別
4. 數據可視化
數據可視化,結果的呈現,也是數據分析過程中至關重要的一環
像大家非常熟悉的函數plot,就可以用來畫曲線圖,但是有時候僅僅曲線圖并不足以來呈現結果,還需要用到比如像三維圖,柱狀圖,餅狀圖,蠟燭圖等等
這部分我并不打算給大家羅列各種圖形對應代碼命令,大家也沒必要刻意地去死記這些代碼,安利一個非常通用的方法
在選擇需要可視化的數據之后,在MATLAB工具條的繪圖窗口,選取你喜歡的圖形,就能生成你需要的結果圖了
不過,至于圖片的細節,像title,legend,網格,還是需要自己微調,但這都不是事,再安利大家一個簡單的方法,完全不用上網去搜
在生成窗口中,點擊屬性檢查器,然后根據自己的需要完善圖片的細節,最后通過生成代碼,就能看到這部分作圖操作的原始代碼了,大家也能在代碼的基礎上再微調,或者復用
5. 數據處理的常用函數
關于數據處理的函數,像max,min,mean,std這些函數都是比較常用的函數,分別是最大值,最小值,平均值,標準差
再安利大家幾個平時我在處理數據時最常用的幾個函數
第一個是unique函數,可以把數據中重復的數據刪去,保留唯一值。unique這個函數不僅僅對數值矩陣有效,在cell中同樣起作用
C = unique(A)unique還有一些拓展的語法和功能,有興趣的朋友可以在MATLAB文檔中查看,不過光這個基本功能,就已經非常夠用了
第二個要推薦的函數是排序,sort和sortrows,兩種函數都有排序的功能,但是使用場景不太一樣
sort的功能是,將矩陣或者cell中的每行或者每列進行升序或降序排列,其中A代表待處理的矩陣或cell數據,dim的選擇有1和2,分別代表對每列和每行進行排序,direction的選擇有'ascend'或 'descend',分別代表升序和降序
B = sort(A,dim,direction)sortrows的功能是,將矩陣或者cell根據某一列進行升序或降序排列,其中A代表待處理的矩陣或cell數據,column代表根據第幾列進行排序,direction的選擇有'ascend'或 'descend',分別代表升序和降序
B = sortrows(A,column ,direction)最后推薦的一個函數是tabulate,非常強的一個命令,可以實現對數據的統計分析,輸出的結果有三列,分別是去重后的數據,出現的次數,已經對應的百分比
再結合sortrows對tabulate生成的結果進行排序,就很容易獲得各個數據根據頻率進行排序的結果
除了上面提到的幾個日常比較常用的函數,還有一些我非常推薦的函數,平時我用的不太多,但是如果用到的時候找不到會很抓狂的那種
比如reshape,可以根據自己的需求對數組進行重構
isequal,可以用來確定兩個數組是否相等
datenum,datestr相信大家比較熟悉,可以將日期轉換成序列值和字符,平時在處理時間相關數據的時候,還可以考慮用years,days,hours,minutes,seconds等等來計算持續時間
常用函數這部分內容就介紹到這,其實還有很多非常贊的函數,歡迎大家把自己喜歡的函數發到評論區
6. 數據爬取
數據爬取部分,其實我想講的是爬蟲,不過也不能算數據分析的技巧,我講這部分內容,更多的是出于建模競賽的原因
建模、仿真和驗證,其實是需要數據的支持的。脫離實際意義的建模,靠拍腦門做出來的結果,都是不提倡的
最簡單的情況,如果有現成的數據文件,可以根據今天聊到的第三部分,讀取數據文件之后進行分析
如果沒有這些數據,我推薦大家使用MATLAB讀取網頁的函數webread進行數據爬取
data = webread(url)爬取到數據之后,再通過regexp函數正則法處理網頁數據
這部分聊的比較淺,但也很難三兩句話把爬蟲講完,推薦大家一個相關的MATLAB爬蟲視頻,講的是我之前用MATLAB爬取B站,視頻很短,一共7分鐘,大家一邊看一邊跟著做練習,基本上半個小時也就全整明白了(知乎不給放二維碼,有需要的朋友,直接上B站搜打浦橋程序員吧)
7. 薅系列工具
最后一部分要安利給大家的是,由我自己開發的薅系列工具
目前反響最好的是薅曲線(HaoCurve),從圖片中提取曲線的原始數據。之前不少參加過建模競賽的朋友經常私信說,拿薅曲線來做結果驗證特別管用
雖然這個工具我平時用到的不太多,不過就沖8000多的下載量來說,我還是很推薦的。需要的朋友,戳下方的文章鏈接獲取工具下載方式
打浦橋程序員:還在用GetData提取曲線數據?MATLAB表示不服?zhuanlan.zhihu.com我個人用的比較多的是另外兩款工具,一個是薅文件(HaoFile),里面的歷史代碼檢索功能很強大,可以大大減少找代碼寫腳本的時間,在數據分析過程中,很多腳本和功能都是可以復用的,有需要的朋友,戳下方的文章鏈接獲取工具下載方式
https://zhuanlan.zhihu.com/p/139437992?zhuanlan.zhihu.com打浦橋程序員:背幾段MATLAB代碼就那么難嗎?
打浦橋程序員:背幾段MATLAB代碼就那么難嗎??zhuanlan.zhihu.com另一款工具是薅模版(HaoTemplate),如果最終數據分析的交付文檔有格式上的要求,薅模版能就發揮它的作用,可以生成特定格式的Excel或Word模版代碼,這可比自己手動去調格式方便很多,有需要的朋友,戳下方的文章鏈接獲取工具下載方式
打浦橋程序員:讓天下沒有難寫的MATLAB代碼?zhuanlan.zhihu.com薅系列工具還有很多,不過在數據分析這部分,我最推薦的是這三款工具
不知覺間,寫了這么多字
今天總結的小技巧,未必是最適合大家的方法,但確實是我這些年養成的一些處理習慣
希望今天總結的方法,對大家平時的工作學習有所幫助,當然大家如果有更推薦的小技巧,歡迎在評論區補充
如果你也對MATLAB感興趣的話,歡迎關注我的微信公眾號“打浦橋程序員”
總結
以上是生活随笔為你收集整理的matlab cell转double_MATLAB处理数据,掌握这7个小技巧就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 遍历_Python手撕广度
- 下一篇: 因为在此系统上禁止运行脚本。有关详细信息