列python blaze之间的相关性

问题描述 投票:3回答:1

有一个关于如何使用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

在阅读了一些blaze文档之后,我发现问题在于将blaze列转换为这样的结构:

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的Anaconda,我的版本:

import blaze
print(blaze.__version__)
#returns 0.6.3
python statsmodels blaze
1个回答
3
投票

scipy.stats这样的模块通常会明确地期望一个numpy数组或pandas DataFrame。 他们的逻辑融入了这些数据结构。

Blaze可以帮助你像外国数据集(比如你的sqlite数据库)那样做numpy或pandas,但是无法进入像scipy.stats这样的scipy.stats并更改它们的代码。

我看到以下解决方案:

  1. 将sqlite中的所有数据都吸收到ndarray / DataFrame中(就像你在这里做的那样)(这很慢)
  2. 改进scipy.stats ,使其不承担特定的数据结构。 (这需要更改成熟的代码库)
  3. 在包含Blaze的更通用的界面上写一些基本的统计数据

在Pearson Correlation的情况下,以更一般的方式重新定义算法将非常简单(#3)。 也许Blaze-stats或只是一般统计模块在这里是合适的。

一般来说,Blaze没有提供现有科学python代码可以在外部数据结构上工作的承诺。 这是一个崇高的目标。

© www.soinside.com 2019 - 2024. All rights reserved.