列之间的相关性python闪耀



得到了一个关于如何使用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.Logt(blz_frame.y,blz_fframe[[train_cols]])?)如果有意义的话,我将Anaconda用于Python 3.4,这是我的blaze版本:

import blaze
print(blaze.__version__)
#returns 0.6.3

scipy.stats这样的模块通常需要一个numpy数组或pandas DataFrame显式。它们的逻辑被烘焙到这些数据结构中。

Blaze可以帮助您在国外数据集(如sqlite数据库)上执行类似numpy或panda的操作,但无法访问scipy.stats等库并更改其代码。

我看到以下解决方案:

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

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

一般来说,Blaze并没有承诺现有的科学python代码将适用于外国数据结构。这是一个崇高的目标。

最新更新