2015-12-03 96 views
0

您好我正在用QT在C++中製作一個穩定的軟件。Linq,Python或Sql,需要關於TSS WSS BSS計算的建議

我需要做很多計算在多變量聚類分析的輸出表: VAR1,VAR2,VAR3,.. VARN,K2,K3,K4 ...... KN 其中VAR1到n爲變量研究, 和k2 kn集羣分類。

表範例: 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.1 4,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

因此,通過例子來計算WSS爲VAR1和K2需要 讓每一個組的大小:由(K2) COUNT(*)組, 計算平均值每組的數量: sum(Var1)group by(k2),然後用前一個數除以每一個。 計算性差異: POW((xgroup1-xmeangroup1),2) 等多項操作....

哪些替代方案將有更多的方便和強大的編纂:

1)上創建一個MySQL表飛行並進行SQL操作。

2)使用LINQ,但我沒有,如果QT有QTLinq類。

3)儘量使LINQ方法的低谷Python的等價物, (如何QT和Python之間的互動,我看到QGIS有很多插件在Python所著)在我的應用程序需要

也讓不少化妝其他微積分。

我希望能夠清楚。 問候

回答

0

經過一段時間後,我回應我的自我, 該解決方案是用Python與Pandas進行的。

這個環節是非常ussefull: 迭代通過組上:http://pandas.pydata.org/pandas-docs/stable/groupby.html 還書「的Python進行數據分析,西麥金尼」 PAG 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] 

我相信可以與骨料(lambda表達式FUNC)可以做或應用。 但我不圖如何 (如果有人知道,請張貼在這裏)

問候