Linq,Python或Sql需要有关TSS WSS BSS计算的建议

时间:2015-12-03 14:40:36

标签: python c++ linq qt pandas

我正在使用QT在c ++中制作一个软件。

我需要使用多变量聚类分析的输出对表进行多次计算: Var1,Var2,Var3,.. VarN,k2,k3,k4 ...... kn 其中Var1到n是研究的变量, 和k2来解决群集分类。

表格示例: VAR1,VAR2,VAR3,VAR4,K2,K3,K4,K5,K6

3464.57,2992.33,2688.33,504.79,2,3,2,3,2

2895.32,3365.35,2824.35,504.86,1,2,3,2,6

2249.32,3300.19,2382.19,504.92,2,1,4,3,4

3417.81,3311.04,2426.04,504.97,1,2,2,5,2

3329.66,3497.14,2467.14,505.03,2,2,1,4,2

3087.85,3653.53,2296.53,505.09,2,1,2,3,4

c ++存储将被定义为: QList表;

Struct record
{
   QList<double>    vars;
   QList<int>   cluster;
 }

我需要计算总数,组内和组平方和。

https://en.wikipedia.org/wiki/F-test

因此,通过示例计算Var1和k2的WSS需要: 在伪代码中: 获得每个组的大小:     count(*)group by(k2), 计算每组的平均值:     sum(Var1)group by(k2),然后将每一个除以前一个计数。 计算差异:     POW((xgroup1-xmeangroup1),2) 和许多其他行动......

哪些替代方案将更容易和更强大的编码:

1)动态创建一个MySQL表并进行SQL操作。

2)使用LINQ,但如果QT有QTLinq类,我不会。

3)尝试通过LINQ方法制作Python等价物,  (QT和Python之间的交互如何,我看到Qgis在Python中有很多插件)

同样在我的应用程序中需要许多其他微积分。

我希望能够清楚。 问候

1 个答案:

答案 0 :(得分:0)

过了一段时间我回应了自己, 解决方案是用Pandas在Python中实现的。

此链接非常有用: 在http://pandas.pydata.org/pandas-docs/stable/groupby.html上对群组进行迭代 还有“Python for Data Analysis,West McKinney”第255页

此视频展示了如何进行计算: ANOVA 2:计算SSW和SSB(其中和之间的平方和)|可汗学院 https://www.youtube.com/watch?v=j9ZPMlVHJVs

[代码]

def getDFrameFixed2D():    
    y = np.array([3,2,1,5,3,4,5,6,7])
    k = np.array([1,1,1,2,2,2,3,3,3])    
    clusters = pd.DataFrame([[a,b] for a,b in zip(y,k)],columns=['Var1','K2'])    
    # print (clusters.head()) print("shape(0):",clusters.shape[0])       
    return clusters

X2D=getDFrameFixed2D()
MainMean = X2D['Var1'].mean(0)
print("Main mean:",MainMean)

grouped = X2D['Var1'].groupby(X2D['K2'])

print("-----Iterating Over Groups-------------")
Wss=0
Bss=0
for name, group in grouped:
    #print(type(name))
    #print(type(group))
    print("Group key:",name)    
    groupmean = group.mean(0)    
    groupss = sum((group-groupmean)**2)
    print("  groupmean:",groupmean)
    print("  groupss:",groupss)
    Wss+= groupss    
    Bss+= ((groupmean - MainMean)**2)*len(group)    

print("----------------------------------")
print("Wss:",Wss)
print("Bss:",Bss)
print("T=B+W:",Bss+Wss)

Tss = np.sum((X-X.mean(0))**2)  
print("Tss:",Tss)
print("----------------------------------")
[/code]

我确信可以使用聚合(lambdas func)或apply。 但我不知道如何 (如果有人知道,请在这里发帖)

问候