3

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]]) など) を使用できますか? Anaconda for Python 3.4、私のバージョンのブレイズ:

import blaze
print(blaze.__version__)
#returns 0.6.3
4

1 に答える 1

3

多くの場合、モジュールscipy.statsは numpy 配列または pandas DataFrame を明示的に期待します。それらのロジックは、これらのデータ構造に組み込まれています。

Blaze は、外国のデータセット (sqlite データベースなど) で numpy や pandas のようなことを行うのに役立ちますが、ライブラリなどにアクセスしてscipy.statsそのコードを変更することはできません。

次の解決策が表示されます。

  1. sqlite からすべてのデータを ndarray/DataFrame に吸い込みます (ここで行っているように) (これは遅いです)
  2. scipy.stats特定のデータ構造を想定しないように改善。(これには、成熟したコードベースを変更する必要があります)
  3. Blaze を含むより一般的なインターフェイスにいくつかの基本的な統計を書き込みます

ピアソン相関の場合、より一般的な方法でアルゴリズムを再定義するのは非常に簡単です (#3)。ここではおそらく、Blaze-stats または単なる一般的な統計モジュールが適切でしょう。

一般的に言えば、Blaze は、既存の科学的な Python コードが外部データ構造で機能するという保証を提供しません。それは高い目標です。

于 2014-10-31T15:33:53.620 に答える