2014-10-31 106 views
3

得到了一個關於如何使用python blaze模塊進行分析的簡單問題。 所以,我試圖做到這一點代碼:列之間的相關性python blaze

from blaze import SQL,Table 
from sqlalchemy import create_engine 
from scipy.stats import pearsonr 
sql_path=r'/path/to/my/database.db' 
e=create_engine('sqlite:///%s'%sql_path) 
blz_sql=SQL(e,'analysis_dataframe') 
blz_frame=Table(blz_sql) 
blz_cols=blz_frame.columns 
corr=pearsonr(blz_frame[blz_cols[0]],blz_frame[blz_cols[10]]) 
print(corr) 

,在這裏我得到這個錯誤:

TypeError: len() of unsized object 

閱讀一些大火文檔後,我發現這個問題是關於殺出列轉換爲一些像這樣的結構:

import pandas as pd 
from blaze import into 
df=into(pd.DataFrame,blz_frame[blz_cols[0]] 

但是,這種轉換使列表列上的pearsonr的迭代計算更慢。 那麼,我怎麼能簡單地將blaze列轉換爲np.array來使用計算(如pearsonr或statsmodels.api.Logit(blz_frame.y,blz_frame [[train_cols]])呢?) 如果有意義,米蟒蛇使用的Python 3.4,我的版本殺出:

import blaze 
print(blaze.__version__) 
#returns 0.6.3 

回答

3

模塊一樣scipy.stats經常想到numpy的數組或數據框大熊貓明確。他們的邏輯被烘焙到這些數據結構中。

Blaze可以幫助你在外部數據集(比如你的sqlite數據庫)上做類似於numpy或pandas的事情,但無法訪問像scipy.stats這樣的庫並更改它們的代碼。

我看到了以下解決方案:

  1. 吸所有來自sqlite的數據爲ndarray /數據幀(如你在這裏做什麼)(這是慢)
  2. 提高scipy.stats,這樣它不不承擔特定的數據結構。 (這將需要改變一個成熟的代碼庫)
  3. 寫一個更一般的接口,包括火焰

在皮爾遜相關性的情況下,這將是非常簡單的重新定義算法更普遍的方式對一些基本統計數據(#3)。也許Blaze-stats或者只是一般的stats模塊在這裏是適合的。

一般來說,Blaze沒有提供現有的科學Python代碼將在外部數據結構上工作的承諾。這是一個崇高的目標。

+0

謝謝你的回答! 現在我使用簡單轉換閃耀陣列和ndarray通過**到**函數。似乎在這種情況下轉換爲ndarray更好。 – IPolar 2014-11-04 20:24:36

相關問題