如何手动加载sklearn数据集?

时间:2018-11-07 06:10:53

标签: python scikit-learn

我想从sklearn数据集(加利福尼亚州的房屋价格)中加载更大的数据集。由于代理问题(数据集下载已损坏),使用默认命令对我不起作用。

d = datasets.fetch_california_housing()

下载后,我将其放置在datasets.get_data_home()/home/username/scikit_learn_data/)找到的目录中,并将文件放置在该文件夹中以及该目录中的cal_housing文件夹中以及CaliforniaHousing文件夹中,以进行检查所有选项。我还尝试使用data_home参数指定自定义位置。

d = datasets.fetch_california_housing(data_home='/home/username/scikit_learn_data/')

没有任何效果。

如何手动加载数据集?

注意: 要测试手动加载是否有效,请设置download_if_missing=False

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,因为我的开发环境无法访问Web,因此默认的“ download_if_missing”当然不能工作。

如果遵循该URL,则可以从网络上保存cal_housing.tgz文件。但是fetch_california_housing方法实际上在默认的download_if_missing分支中进行了更多转换,并期望有一个pkz文件(如Vivek上面已经指出的那样)。我在这里找到了创建该.pkz文件的解决方法:(https://github.com/ageron/handson-ml/issues/221)。我在这里重新张贴Auréliens的答案(赞!):

报价: ” 我可以给您一个解决方法:

使用网络浏览器手动下载数据:https://ndownloader.figshare.com/files/5976036 确保下载的文件名为cal_housing.tgz。 执行以下Python代码:

import numpy as np
import os
import tarfile
from sklearn.externals import joblib
from sklearn.datasets.base import _pkl_filepath, get_data_home

archive_path = "cal_housing.tgz" # change the path if it's not in the current directory
data_home = get_data_home(data_home=None) # change data_home if you are not using ~/scikit_learn_data
if not os.path.exists(data_home):
    os.makedirs(data_home)
filepath = _pkl_filepath(data_home, 'cal_housing.pkz')

with tarfile.open(mode="r:gz", name=archive_path) as f:
    cal_housing = np.loadtxt(
        f.extractfile('CaliforniaHousing/cal_housing.data'),
        delimiter=',')
    # Columns are not in the same order compared to the previous
    # URL resource on lib.stat.cmu.edu
    columns_index = [8, 7, 2, 3, 4, 5, 6, 1, 0]
    cal_housing = cal_housing[:, columns_index]

    joblib.dump(cal_housing, filepath, compress=6)

之后,您应该可以使用fetch_california_housing()了,而不会出现任何问题。之所以起作用,是因为上面的代码是fetch_california_housing()在下载数据后首次调用它的方式:它准备数据并将其保存在Scikit-Learn的数据目录(默认为$ HOME / scikit_learn_data)的高速缓存中。下次调用fetch_california_housing()时,它将仅从该目录加载数据,因此无需下载。

希望这会有所帮助, Aurélien

Auréliens报价结束

答案 1 :(得分:0)

另一个选择是:

  1. 按上述说明手动下载 cal_housing.tgz 文件,然后将其复制,例如到C:\ Temp。

  2. 打开文件[YOUR_PYTHON_PATH] \ Lib \ site-packages \ sklearn \ datasets \ base.py

  3. 在函数 _fetch_remote()中,注释掉行 urlretrieve(remote.url,file_path)。然后python不要尝试再次下载文件 cal_housing.tgz

  4. 开始 d = datasets.fetch_california_housing(data_home ='C:// tmp //'),然后将创建文件 cal_housing_py3.pkz 。< / p>

  5. 然后您应该返回步骤3。

我知道这有点丑陋,因为您必须更改内部python软件包文件。但这有效。

答案 2 :(得分:0)

from sklearn.datasets import california_housing
data = california_housing.fetch_california_housing()
calf_hous_df = pd.DataFrame(data= data.data, columns=data.feature_names)    
calf_hous_df.head(5)

Out[105]: 
   MedInc  HouseAge  AveRooms  AveBedrms  Population  AveOccup  Latitude  \
0  8.3252      41.0  6.984127   1.023810       322.0  2.555556     37.88   
1  8.3014      21.0  6.238137   0.971880      2401.0  2.109842     37.86   
2  7.2574      52.0  8.288136   1.073446       496.0  2.802260     37.85   
3  5.6431      52.0  5.817352   1.073059       558.0  2.547945     37.85   
4  3.8462      52.0  6.281853   1.081081       565.0  2.181467     37.85   

   Longitude  
0    -122.23  
1    -122.22  
2    -122.24  
3    -122.25  
4    -122.25