列之间的相关性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]]
但是此转换使列列表上的皮尔森迭代计算变慢.
因此,我如何简单地将blaze列转换为np.array以使用计算(如上的pearsonr或statsmodels.api.Logit(blz_frame.y,blz_frame [[train_cols]])?)
如果可行,我正在将Anaconda用于Python 3.4,这是我的版本:
import blaze
print(blaze.__version__)
#returns 0.6.3
解决方法:
像scipy.stats之类的模块通常会期望使用numpy数组或pandas DataFrame.他们的逻辑融入了这些数据结构中.
Blaze可以帮助您在外部数据集(例如sqlite数据库)上进行类似numpy或pandas的操作,但无法访问scipy.stats之类的库并更改其代码.
我看到以下解决方案:
>将所有数据从sqlite吸到ndarray / DataFrame中(就像您在此处所做的那样)(这很慢)
>改善scipy.stats,使其不采用特定的数据结构. (这将需要更改成熟的代码库)
>在包括Blaze在内的更通用的界面上编写一些基本统计信息
在Pearson Correlation的情况下,以更通用的方式重新定义算法非常简单(第3点).也许Blaze统计信息或只是一般统计信息模块在这里比较合适.
一般而言,Blaze不能保证现有的科学python代码可以在外部数据结构上运行.这是一个崇高的目标.
标签:blaze,python,statsmodels 来源: https://codeday.me/bug/20191121/2049202.html