使用corr()方法处理sklearn束对象虹膜

时间:2018-10-13 18:27:18

标签: python machine-learning methods scikit-learn dataset

在下面的代码中,我假设 iris 是专门为sklearn /数据集设计的一堆对象。

# import load_iris function from datasets module
from sklearn.datasets import load_iris

# save "bunch" object containing iris dataset and its attributes
iris = load_iris()

当我试图了解它是什么类型的对象时,它会说成束对象。

type(iris)
Out[4]:
sklearn.utils.Bunch

现在,如果我需要使用corr()方法计算每对属性之间的标准相关性,则需要在数据框上工作,而不是束对象上。

我该怎么做?我可以在iris.data上执行它吗?我知道这是一个数组。不是数据框。

# check the types of the features
print(type(iris.data))
Out[5]:
<class 'numpy.ndarray'>

现在,如果我使用海运的内置数据集或实际数据源的数据集,则不会出现此问题。在这里iris.corr()正常工作。是的,这里的 iris 是数据框。

iris = sns.load_dataset("iris")
type(iris)
Out[7]:
pandas.core.frame.DataFrame
iris.corr()
Out[8]:

              sepal_length  sepal_width  petal_length  petal_width
sepal_length      1.000000    -0.117570      0.871754     0.817941
sepal_width      -0.117570     1.000000     -0.428440    -0.366126
petal_length      0.871754    -0.428440      1.000000     0.962865
petal_width       0.817941    -0.366126      0.962865     1.000000

如何在上一个示例中运行corr()?使用sklearn束对象?如何将sklearn束对象转换为数据框?还是将iris.data ndarray转换为dataframe?

1 个答案:

答案 0 :(得分:0)

查看How to convert a Scikit-learn dataset to a Pandas dataset?的回复后,可能是答案。感谢大家的指导。

from sklearn.datasets import load_iris
import pandas as pd
import numpy as np

data = load_iris()

我们可以使用np.column_stack组合特征和目标变量。

df = pd.DataFrame(np.column_stack((data.data, data.target)), columns = data.feature_names+['target'])
print(df.head())

输出:

sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)     target
0                5.1               3.5                1.4               0.2     0.0
1                4.9               3.0                1.4               0.2     0.0 
2                4.7               3.2                1.3               0.2     0.0 
3                4.6               3.1                1.5               0.2     0.0
4                5.0               3.6                1.4               0.2     0.0

现在,我们可以通过将target_names转换为字典并添加新列来进行替换:

df['label'] = df.target.replace(dict(enumerate(data.target_names)))
print(df.head())

输出:

sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)     target  label 
0                5.1               3.5                1.4               0.2     0.0     setosa
1                4.9               3.0                1.4               0.2     0.0     setosa
2                4.7               3.2                1.3               0.2     0.0     setosa
3                4.6               3.1                1.5               0.2     0.0     setosa
4                5.0               3.6                1.4               0.2     0.0     setosa