机器学习之:载入数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/happyhorizion/article/details/83701664

加载公共的开放数据

通过url链接下载

通常网上有很多开放数据供算法测试。通常要用到urllib从给定的链接下载。例如从UCI机器学习数据仓库中下载的数据:

import numpy as np 
import urllib 
# url with dataset 
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data" 
# download the file 下载文件 
raw_data = urllib.request.urlopen(url) 
# load the CSV file as a numpy matrix 
dataset = np.loadtxt(raw_data, delimiter=",") 
# separate the data from the target attributes 
X = dataset[:,0:7] 
y = dataset[:,8]

加载sklearn的数据集

sklearn提供了常见的很多数据集,可以很方便地直接调用。使用load_*方法导入:

from sklearn.datasets import load_digits
digits = load_iris()
print(iris)
images = digits.images
target = digits.target

加载本地文件

如果是本地的文件,如果是txt格式的,可以使用np.loadtxt加载

import numpy as np
#加载本地工作空间的文件‘iris.txt’
np.loadtxt('iris.txt',delimiter=',', dtype=<type 'float'>, comments='#', converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)

如果是csv格式的,可以用pandas的load_csv()加载:

import pandas ad pd
csv_data = pd.read_csv()

如果数据比较复杂,以一定的目录结构保存的,那么加载这些不同类别的文件该如何操作呢? 假设文件的存放路径为:

container_folder/

category_1_folder/
file_1.txt file_2.txt … file_42.txt
category_2_folder/
file_43.txt file_44.txt …

其中,子文件夹(category_1_folder)的名字区别,作为监督学习的标签区别。
这种情况可以用sklearn.datasets.load_files()函数实现。

sklearn.datasets.load_files(container_path, description=None, categories=None,load_content=True, shuffle=True, encoding=None, decode_error='strict', random_state=0)[source]

上面的参数只解释container_path,load_content=True,encoding=None:
container_path:“container_folder”的路径。
load_content=True:是否真的把文件中的内容加载到内存中,选择true就是了。
encoding=None:string or None (default is None),是否解码文件中的内容(主要针对图片、视频或其他二进制文件,而非文本内容);如果不是None,那么在load_content=True的情况下,就会解码文件中的内容。注意,当前文本文件的编码方式一般为“utf-8”。如果不指明编码方式(encoding=None),那么文件内容将会按照bytes处理,而不是unicode处理,这样模块“sklearn.feature_extraction.tex”中的很多函数就不能用了。

返回值:data : Bunch, 得到与直接加载sklearn的数据集相同的数据结构:

  • Dictionary-like object。我们感兴趣的有:

  • data:原始数据,格式参考下图。

  • filenames:每个文件的名字

  • target:类别标签(从0开始的整数索引)

  • target_names:类别标签(数字)的具体含义(由子文件夹的名字category_1_folder决定)

实例:

data_folder/

category_1_folder/
1.txt file_2.txt
category_2_folder/

3.txt 4.txt

from sklearn import datasets
rawData = datasets.load_files("data_folder")

rawData
Out[10]: 
{'DESCR': None,
 'data': ['5 start, \r\ni like this book.',
  '4 start, \r\nthis book is good,\r\ni like it.',
  "1 start, \r\npretty bad, don't like it at all.",
  "2 start, \r\nwe don't like so much."],
 'filenames': array(['data_folder\\positive_folder\\1.txt',
        'data_folder\\positive_folder\\2.txt',
        'data_folder\\negative_folder\\4.txt',
        'data_folder\\negative_folder\\3.txt'], 
       dtype='|S33'),
 'target': array([1, 1, 0, 0]),
 'target_names': ['negative_folder', 'positive_folder']}

rawData.data
Out[11]: 
['5 start, \r\ni like this book.',
 '4 start, \r\nthis book is good,\r\ni like it.',
 "1 start, \r\npretty bad, don't like it at all.",
 "2 start, \r\nwe don't like so much."]

rawData.target
Out[12]: array([1, 1, 0, 0])

rawData.filenames[rawData.target[0]]
Out[13]: 'data_folder\\positive_folder\\2.txt'

参考:
https://blog.csdn.net/mmc2015/article/details/46852755
http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_files.html

猜你喜欢

转载自blog.csdn.net/happyhorizion/article/details/83701664