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语言则可以很轻松实现本文所要拟合的方程和要优化求解的数值,当然这离不开借助可适用的函数或包。