uniapp无法使用substr_关公战秦琼------Excel、SPSS Modler和R的使用对比(下)
5. 數據可視化
Excel
在Excel中對數據可視化除常用的圖表外,還有樣式、迷你圖等直接和實際數據來共同展示效果。另外,還可以與切片器、PowerView等功能結合來動態可視化。Excel中圖表的類型很多,如常見的散點圖、折線圖、柱形圖、餅圖等,但是遺憾的是沒有熱力圖,我們可以借助條件格式來設定不同值的樣式,進而達到類似熱力圖的效果。
首先,我們利用數據透視表將前面生成的數據透視成風速-對風角兩兩相對的矩陣形式并以功率比值來填充,然后在條件格式中設定最大值、最小值以及中間值的顏色,來呈現數值大小所對應的色階。如圖所示,可以看出大部分的最大值(紅色)不處于名義對風角為0的位置,說明存在對風的偏差;同時也可以看出,不同風速下的最大值位置也并不完全一致。 我們可以直接取其平均最大值處作為整體偏差(如圖中
處),也可以分別求出最大值偏差位置,然后平均,等等有許多簡化的方法。進一步的,我們可以選取其中一個風速區間,作它的散點圖或拆線圖(具體步驟省略)。從圖中可以看出,實際結果會存在一些波動,我們也可以先平滑或者擬合成曲線后,再取極值來作為偏差所在的位置,這樣可以利用更多數據的信息,減少異常值的影響。Excell可擬合的曲線有限,可以嘗試選取比較后確定或者結合泰勒公式來處理(如本文可以對功率開立方后,按余弦展開式特點選用最大次數為偶數的多項式來擬合)。
Modeler
Modeler中可視化的方法不多,圖表的類型也較少,也沒有熱力圖。可以利用矩陣節點來達到類型Excel透視后的效果,但無法進行格式展示,只能Highlight top和bottom幾個值(設置過程省略),粗略可以看出最大值也不在名義角度
處。拆線圖可以利用線圖結點來選擇相應的字段即可,也可以利用其它字段來區分不同的面板、顏色、圖標等。相比Excel需要分別手工插入圖表并定義不同的單元格范圍,簡便了不少。但是Modeler只能對數據平滑,無法直接在圖中對數據擬合。
R
用R作圖則是最為靈活和強大的,尤其是配合ggplot2作圖包(及其各種衍生包)。可以直接用熱力圖的函數來作圖,并自由的定義各種元素,但同時也可以看出,前提是要熟悉這些函數和參數的定義和用法,增加了學習掌握的門檻,不像上面兩個軟件那樣操作簡單直觀。
library(ggplot2) gg0 = ggplot(BinData, aes(x=Bin_Angle, y=Bin_Speed, fill=Power_Ratio))+geom_tile()+guides(fill=F)+theme(plot.title=element_text(hjust=0.5))+xlab('Misalignment Angle')+ylab("Wind Speed")+labs(title="Power Coefficient")+scale_fill_gradient2(low="#66bd63", high="#f46d43",mid="#ffffbf",midpoint =0.9)+geom_text(aes(label=substr(as.character(round(Power_Ratio,2)),1,4)), angle=0,size=3) print(gg0)我們使用階梯圖函數來繪制單一風速區間下的功率與名義對風角的關系,同時在每二坐標軸上繪制風頻在名義對風角上的分布。從圖中可以看出,風頻(次數或時間)最大位置并不對應功率的最大位置,這就是產生能量損失的直接原因,我們要做的修正就是,將功率折線向左移動,使功率最大的位置所處的時間更長,平移前后功率與風頻乘積和的差異就是所提高的發電量。但功率折線左移后,最左邊位置是沒有功率數據的,因此我們要量化這個差異或者找到最優平移量,就需要對功率擬合后進行外推。
SpeedData = BinData[BinData$Bin_Speed==5,] ratio = 10 shift = -200 gg1 = ggplot()+scale_y_continuous( "Power",sec.axis = sec_axis(~.*ratio+shift*ratio, name = "Count"))+coord_cartesian(xlim=c(-12, 12))+xlab("Yaw Angle")+geom_step(data=SpeedData, aes(x=Bin_Angle-1, y=Power,colour="A"))+geom_step(data=SpeedData, aes(x=Bin_Angle-1, y=State/ratio-shift,colour="B"))+theme(legend.position = "bottom",legend.title = element_blank())+scale_color_manual(values = c("red","blue"),labels=c("Power","Count")) print(gg1)6. 數據建模
如果說前面步驟三種軟件還能殊途同歸,實現共同的目標結果,數據建模則只能分道揚鑣、各行其道。EXCEL應用廣泛,財經統計、工程計量、信息管理等等各行各業都不可或缺;相應功能也多種多樣,數據存儲、回歸擬合、抽樣檢驗、規劃求解、信號分析等皆有涉獵。但是每項大概只以20%功能實現80%的需求為目標,并不能做到深入全面。Modeler只針對數據分析建模,考慮到與SPSS Statistics的互補,基本只集中于機器學習類的模型,模型擴展性不足。而R作為開放性語言,幾乎可以實現任何建模的需求,也可以很方便的進行模型創新,但對于普通人應用來說,大多數需要利用現成的包,目前主要是集中于數據統計分析建模,機器學習類的也有不少且在不斷擴充中,但相對Python的scikit-learn、TensorFlow、pytorch等庫的用戶要少的多。
6.1 曲線擬合
首先在不同的風速區間下,擬合功率與名義對風角度的關系,求出各自的偏差值。
Excel
如上文可視化所介紹,Excel可以添加趨勢線的方式對曲線進行多項式擬合,但是所能擬合的曲線類別有限,如背景介紹的公式是無法實現的。因此,我們需要借助一些專業知識來實現,比如信號處理技術。無法用傅里葉變換(雖然EXCEL有此功能,但是采樣點不夠半個周期),可以用三點法(對正弦信號進行三點采樣,可計算得到其周期、幅值和相位)來擬合。為簡化介紹,取背景公式中n為已知數,而周期也是已知的,因此只需兩點即可。假設在名義對風角0度兩側相差
的對稱兩點的功率值 ,則由背景公式:展開后可得:
進而得到:
在EXCEL中利用函數寫入上述公式并引用對應數值即可求出結果。進一步,可求出無偏差時的最大功率
。任意兩點都可利用此公式計算出一個偏差值,按中位數選取即可。如果n為未知數時,也可以推導出偏差值的顯式計算公式,大家有興趣的嘗試一下。
Modeler
Modeler中同樣無法擬合三角函類型的曲線,而且也不方便像Excel一樣直接在表格中進行公式計算,這里利用導數性質來計算,同樣取n為常數3,由功率與名義對風角度的公式可以得到:
因此我們只要求出在某點
處的導數 ,結合 處功率值 即可求出 值:因此,我們可以在Modeler中選取名義對風角度0度兩側較小范圍的數據,對不同風速區間的功率開立方值和對風角度弧度值,利用Regression節點進行線性擬合。
R
用R來擬合曲線則非常輕松簡單:
expre <- "Power~P*(cos(Bin_Angle*pi/180+g))^n" out <- nls(expre,data=SpeedData,start=list(P=400,g=0,n=3),weights = State) out$m$getPars()6.2 優化求解
根據求出的不同偏差值,來計算最優的統一修正值,目標是使得修正后的發電量最大。
Excel
將求得的不同風速下的功率和誤差值整理如圖,并可以計算考慮修正值(D16單元格)時的功率結果:
D10=$B10*POWER(COS(RADIANS(D$9-$C10+$D$16)),3)功率乘以相應的頻次(不考慮時間單位)則可得總的發電量計算公式:
E16=SUMPRODUCT(D3:N5,D10:N12)/6選擇“模擬分析"菜單中的"單變量求解"功能,以“E16”為目標單元格,以”D16"為可變單元格,目標值可設為比當前值大些的值,多次調整后即可得滿意結果,如圖所示。
Modeler
優化求解對于Modeler來說和曲線擬合類似,屬于其盲區之外,為對比的完整性,這里使用一個略笨的方法。
R
fn.prod<-function(delta,Angle,Err,MaxP,n,Count) {b=(Angle-Err+delta)*pi/180c=(cos(b))^n*MaxP*Count/6return(sum(c)) } fn<-function(delta){fn.prod(delta,data$Angle,data$g,data$P,3,data$Records)} opt<-optimize(fn,interval=0.1,lower=-10,upper=10,maximum=TRUE) print(opt)7. 總結
7.1 數據導入
從可導入的文件類型來看,除通用的文本類數據和ODBC數據外,Excle主要支持的為微軟同門的如Access、SQLServer等數據來源。Modeler則除上面提到文件/數據庫外,還可以支持一些統計軟件格式數據如IBM同門的Statistics、COngnos BI及其對手SAS等。R則除可輕松導入上面提到的數據文件/庫外,借助各種包,其它的數據庫/文件,肯定也不在話下。
從操作步驟來看,Excel更多借助手工操作,對批量導入多文件不太友好,除非用VBA代碼實現循環。Modeler利用相應節點,設定簡單直觀,批量導入只需復制即可,但數量較多時也略嫌繁瑣。R則可以通過循環代碼實現,實現后代碼幾乎不用隨文件增多而改變。
7.2 數據處理
從數據處理的過程來看,Excel數據與操作同一界面出現,便于直觀處理,入手輕松。對于列數據的處理計算通過函數和位置的引用,非常方便;但對于行數據的處理(篩選、聚合等)則更多依靠手工選擇或數組公式,略顯復雜,數據更新時較難自動更新。
Modeler采用數據流類操作,界面直觀。行、列數據的處理都有不同的節點,可以靈活方便的使用,數據和流程分離,數據更新后,可不用修改直接運行,很適合商業場合定期分析的需要。但如果沒有相應的節點或函數支持的功能,則較難擴展實現。
R語言作為編程類語言,入手的門檻較高,熟悉后則應用方便,尤其各種包的應用,可將許多復雜問題簡單化,而且可按自己的想法編程實現,擴展功能或者探索創新。
7.3 數據可視化
Excel文件打開本身就是將數據展示在眼前。選中數據則可以輕松插入圖表,靈活調節各視覺元素,簡單易用,地球人都知道。Modeler的圖表節點可設定內容更多操作也略復雜,但結果的呈現較專業,唯一不足的是除給定的節點外,無法做出其它的圖。R的圖表尤其是ggplot2包,幾乎可以實現任何圖表,修改任何表中元素,堪稱完美,除了前面所說的,使用掌握的門檻較高。
7.4 數據建模
Excel 可建模型廣度較廣但深度略淺,就本文要擬合的方程來說,是無法直接實現的,只能通過推導出顯式公式后來求解,最后的優化問題也是通過單變量求解試算來手工實現。
Modeler的機器學習模型更多更深,但本文的需求并不對其路數,也只能推導到直線擬合問題才能實現,后面的優化問題也只能通過暴力窮舉法才達成求解。
R語言則可以很輕松實現本文所要擬合的方程和要優化求解的數值,當然這離不開借助可適用的函數或包。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的uniapp无法使用substr_关公战秦琼------Excel、SPSS Modler和R的使用对比(下)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 上传文件漏洞_文件上传及解析
- 下一篇: lumion自动保存_LUMION吊打M